<?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: Autumn</title>
    <description>The latest articles on DEV Community by Autumn (@autumn_tonita).</description>
    <link>https://dev.to/autumn_tonita</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%2F986296%2Fc44e5522-1b41-4e1e-9573-c3dee4f3d6a4.jpg</url>
      <title>DEV Community: Autumn</title>
      <link>https://dev.to/autumn_tonita</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/autumn_tonita"/>
    <language>en</language>
    <item>
      <title>Before You Rebrand: A Second Act Approach to Marketing</title>
      <dc:creator>Autumn</dc:creator>
      <pubDate>Thu, 19 Mar 2026 17:10:57 +0000</pubDate>
      <link>https://dev.to/autumn_tonita/before-you-rebrand-a-second-act-approach-to-marketing-40pb</link>
      <guid>https://dev.to/autumn_tonita/before-you-rebrand-a-second-act-approach-to-marketing-40pb</guid>
      <description>&lt;p&gt;The idea of starting over feels powerful. It’s satisfying to imagine a clean system with no outdated language or choices. No half-finished ideas stitched together over time. Just a fresh start with where you’re at right now.&lt;/p&gt;

&lt;p&gt;In software, a blank slate or a “rewrite” promises modern architecture and tidy patterns. In marketing, it promises a sharper story with messaging that finally says what we meant all along.&lt;/p&gt;

&lt;p&gt;Part of the appeal is control. When you start from scratch, you get to make every decision again. You’re no longer constrained by what came before. You don’t have to explain past campaigns. You don’t have to reconcile inconsistencies. You just… begin.&lt;/p&gt;

&lt;p&gt;There’s also relief in it. If performance is slipping, if competitors look cooler, or if the website feels dated, a rewrite feels like action. It signals progress, even before anything has actually improved. We like to believe that if we built it today, we’d build it better.&lt;/p&gt;

&lt;p&gt;The problem is, the blank slate erases more than mistakes. It erases context, hard-won lessons, and even the invisible architecture that’s been holding everything together.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rewrite reflex
&lt;/h2&gt;

&lt;p&gt;The rewrite reflex rarely makes its first appearance as a dramatic announcement. It usually begins as a quiet frustration. Things feel heavier than they used to. Progress feels slower. The structure that once made sense now feels layered, maybe even messy. And at some point, someone wonders out loud whether it would be easier to just start over.&lt;/p&gt;

&lt;p&gt;In software, that conversation is familiar. When architecture feels dated, patterns are inconsistent, and new features take more effort than expected, a rewrite starts to sound appealing because it promises clarity and control.&lt;/p&gt;

&lt;p&gt;“If we rebuilt it today, we’d design it differently. We’d avoid the compromises. We’d get it right.”&lt;/p&gt;

&lt;p&gt;In marketing, we don’t usually call it a “rewrite.” We might say, “We need a rebrand.” Or, “Our messaging isn’t working.” Or, “We’ve outgrown this.” But underneath it, the instinct is the same: let’s just start over.&lt;/p&gt;

&lt;p&gt;There’s nothing wrong with this impulse, though. It usually comes from a good place, like wanting the story we tell to reflect who we’ve become. We want the product, the brand, and the market perception to feel aligned. When something feels off, replacing it feels like decisive action.&lt;/p&gt;

&lt;p&gt;But the rewrite reflex assumes that history is the problem.&lt;/p&gt;

&lt;p&gt;Sometimes the issue isn’t that the system exists. It’s that we haven’t taken the time to understand what’s actually working inside it. In software, years of knowledge are embedded in the code. In marketing, context is embedded in how customers already perceive you, even if imperfectly.&lt;/p&gt;

&lt;p&gt;That’s valuable.&lt;/p&gt;

&lt;p&gt;What marketing “rewrites” usually ignore&lt;br&gt;
When a team decides to “start fresh,” the focus is usually on what feels broken, like a dated website or generic messaging. Maybe competitors feel sharper. Internally, it may feel like the brand no longer reflects the company’s direction.&lt;/p&gt;

&lt;p&gt;All of that can be true, but what often gets overlooked is what’s already working quietly in the background.&lt;/p&gt;

&lt;p&gt;Every brand exists inside a context. Customers already compare you to something. They already have a mental shortcut for what you are and what problem you solve. Even if your messaging isn’t perfect, it has been doing the steady work of setting expectations.&lt;/p&gt;

&lt;p&gt;A full rewrite can disrupt that context and unintentionally erase the language your best customers resonated with. It can even shift the frame of reference, making it harder to place.&lt;/p&gt;

&lt;p&gt;There’s also the question most teams skip: who already loves this?&lt;/p&gt;

&lt;p&gt;Before rewriting everything, it’s worth asking which customers immediately “get” your value and why. What were they comparing you to when they chose you? What specific attributes mattered to them? What did they believe they were buying? What made them say yes?&lt;/p&gt;

&lt;p&gt;Those answers reveal more about your positioning than any new tagline will.&lt;/p&gt;

&lt;p&gt;Often, the problem isn’t that the brand is wrong. It’s that it was never fully articulated. The differentiators are there, but they’re buried under feature lists or overly broad messaging. The value themes are real, but they haven’t been distilled.&lt;/p&gt;

&lt;p&gt;A rewrite wipes the surface clean, but in mature companies, there is usually more structure beneath all that than anyone realizes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The second act approach to marketing
&lt;/h2&gt;

&lt;p&gt;A second act in marketing doesn’t mean erasing what came before. It means understanding what’s already true and making it clearer.&lt;/p&gt;

&lt;p&gt;In software, a second act might look like refactoring, &lt;a href="https://www.planetargon.com/services/ruby-on-rails-upgrade" rel="noopener noreferrer"&gt;modernizing a stack&lt;/a&gt;, or tightening architecture without discarding years of domain knowledge. In marketing, it looks similar. You don’t abandon your history. You clarify it. You strengthen the parts that have quietly been working. You refine the structure so the value is easier to see.&lt;/p&gt;

&lt;p&gt;For our own marketing, this hasn’t meant a dramatic rebrand or a new identity. It has meant revisiting our service pages and rewriting them with more precision so they reflect the work we’re actually doing today. It has meant creating new service pages where our capabilities have expanded, instead of trying to force new strengths into old language.&lt;/p&gt;

&lt;p&gt;It has meant widening the company's voice. Our engineers are speaking at events, attending meetups, and contributing to the conversation alongside leadership. More of our team members are writing blog posts, which means our perspective is broader and more grounded in real project experience. We’re highlighting what we do well instead of trying to sound like everything to everyone.&lt;/p&gt;

&lt;p&gt;We’re also experimenting. Testing new content formats. Trying different social approaches. Paying attention to what resonates. Not because we’re chasing trends, but because we’re curious about how to better articulate the strengths we already have.&lt;/p&gt;

&lt;p&gt;None of that meant we had to start over. It meant we had to look closely at what exists and ask how to evolve it.&lt;/p&gt;

&lt;p&gt;That’s the difference.&lt;/p&gt;

&lt;p&gt;When a rewrite actually makes sense&lt;br&gt;
Rewrites aren’t always wrong. Sometimes they’re necessary.&lt;/p&gt;

&lt;p&gt;In software, that might look like:&lt;/p&gt;

&lt;p&gt;The business model has fundamentally changed&lt;br&gt;
The architecture can’t support where the company is headed&lt;br&gt;
The cost of preserving the system outweighs the cost of rebuilding&lt;br&gt;
In marketing, it’s similar. A true reset may be warranted if:&lt;/p&gt;

&lt;p&gt;You’ve shifted customer segments entirely&lt;br&gt;
You’ve entered a new market with different expectations&lt;br&gt;
Your business model has materially changed&lt;br&gt;
Your previous positioning was never clearly defined in the first place&lt;br&gt;
In those cases, you’re not refining the same story. You’re telling a new one.&lt;/p&gt;

&lt;p&gt;But most situations aren’t like that. More often, what feels broken is misalignment. The product evolved, a team matured, or the market shifted slightly, and the language just hasn’t caught up.&lt;/p&gt;

&lt;p&gt;Lean into the layers&lt;br&gt;
Starting over will always feel tempting. In code and in marketing, most mature systems aren’t broken. They’re layered with context that took years to build.&lt;/p&gt;

&lt;p&gt;Before you rewrite, it’s worth asking what actually needs to change. Sometimes the answer is everything. More often, it’s alignment and a clearer articulation of what’s already working and where you’re heading.&lt;/p&gt;

&lt;p&gt;Good software deserves a &lt;a href="https://www.planetargon.com/second-act" rel="noopener noreferrer"&gt;second act&lt;/a&gt;. So do good brands!&lt;/p&gt;

</description>
      <category>marketing</category>
      <category>rebrand</category>
      <category>learning</category>
      <category>design</category>
    </item>
    <item>
      <title>When Reporting Quietly Becomes the Slowest Part of your Rails app</title>
      <dc:creator>Autumn</dc:creator>
      <pubDate>Wed, 18 Mar 2026 23:08:17 +0000</pubDate>
      <link>https://dev.to/planetargon/when-reporting-quietly-becomes-the-slowest-part-of-your-rails-app-n8g</link>
      <guid>https://dev.to/planetargon/when-reporting-quietly-becomes-the-slowest-part-of-your-rails-app-n8g</guid>
      <description>&lt;p&gt;Reporting rarely shows up as a problem on day one.&lt;/p&gt;

&lt;p&gt;It usually starts with something small and useful. You set up a dashboard, a few queries, and maybe a quick way to answer a question that used to take too long.&lt;/p&gt;

&lt;p&gt;This seems to work fine, so it gets left alone.&lt;/p&gt;

&lt;p&gt;Then the app grows.&lt;/p&gt;

&lt;p&gt;With more data, more questions, expanded filters, and more metrics, this process begins to carry more weight than it was designed for.&lt;/p&gt;

&lt;p&gt;At some point, it stops feeling simple.&lt;/p&gt;

&lt;p&gt;We start to see reporting become one of the slowest, most complex parts of an otherwise healthy Rails application.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pattern we keep running into
&lt;/h2&gt;

&lt;p&gt;What’s interesting is that this doesn’t happen because of one bad decision. It’s usually a series of reasonable ones.&lt;/p&gt;

&lt;p&gt;A query gets a little more complex. Then another layer gets added. Active Record turns into raw SQL. Indexes are introduced to keep things fast. Views are added to organize the logic.&lt;/p&gt;

&lt;p&gt;Each step makes sense on its own, right?&lt;/p&gt;

&lt;p&gt;But over time, the system becomes harder to understand, slower to run, and more difficult to change. Upgrades get riskier, and even small changes start to feel expensive.&lt;/p&gt;

&lt;p&gt;Teams often try to fix this by adding more indexes or introducing views, but they don’t make queries faster. Materialized views can work for smaller datasets, but become costly to refresh as things grow&lt;/p&gt;

&lt;p&gt;None of these approaches are wrong. They just don’t always address the root of the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  A shift in how we approach reporting
&lt;/h2&gt;

&lt;p&gt;Instead of continuing to optimize increasingly complex queries, we step back.&lt;/p&gt;

&lt;p&gt;Most reporting is time-based: Days. Weeks. Months.&lt;/p&gt;

&lt;p&gt;That gives us a clue.&lt;/p&gt;

&lt;p&gt;Rather than calculating everything on the fly, we look for the smallest useful unit of data. Often that’s a day. Sometimes it’s something else. But there’s usually a clear base unit underneath the complexity.&lt;/p&gt;

&lt;p&gt;Once you find that, you can start shaping the data in advance rather than rebuilding it on every request.&lt;/p&gt;

&lt;h2&gt;
  
  
  What tends to work better in practice
&lt;/h2&gt;

&lt;p&gt;From here, a few patterns make reporting systems much easier to work with as they grow.&lt;/p&gt;

&lt;p&gt;We create tables that are designed specifically for reporting, storing only the data needed to answer those questions. Instead of querying across many tables with complex joins, we aim to keep reporting queries focused and predictable.&lt;/p&gt;

&lt;p&gt;We move heavy data processing out of request time, so user-facing performance doesn’t compete with reporting workloads. In some cases, this means using a follower database or a separate process to prepare reporting data in the background.&lt;/p&gt;

&lt;p&gt;And we accept a small tradeoff: not everything needs to be real-time. In many cases, slightly delayed but fast and reliable reporting is a much better experience than slow, live queries.&lt;/p&gt;

&lt;h2&gt;
  
  
  We’re walking through this LIVE
&lt;/h2&gt;

&lt;p&gt;We’ve been seeing this pattern often enough in client work that we decided to put together a short session to walk through how we approach it.&lt;/p&gt;

&lt;p&gt;If reporting has started to feel heavier than it should, you’re welcome to join us.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/events/7438280088971935744?viewAsMember=true" rel="noopener noreferrer"&gt;Join the session&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fod7xc7olmfybgsb6aqpn.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fod7xc7olmfybgsb6aqpn.jpeg" alt="how to build reports with rails" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>development</category>
      <category>rails</category>
    </item>
    <item>
      <title>Ruby 4.0 and Ruby Box: What Changed and How to Upgrade Safely</title>
      <dc:creator>Autumn</dc:creator>
      <pubDate>Wed, 04 Feb 2026 17:04:47 +0000</pubDate>
      <link>https://dev.to/planetargon/ruby-40-and-ruby-box-what-changed-and-how-to-upgrade-safely-24en</link>
      <guid>https://dev.to/planetargon/ruby-40-and-ruby-box-what-changed-and-how-to-upgrade-safely-24en</guid>
      <description>&lt;p&gt;&lt;a href="https://www.ruby-lang.org/en/news/2025/12/25/ruby-4-0-0-released" rel="noopener noreferrer"&gt;Ruby 4.0 dropped over the holidays&lt;/a&gt;, bringing us all new primitives for isolation, parallelism, and performance, as well as upgrade anxiety (inevitable) and the perpetual temptation to just rewrite our entire app (resist!). Let’s dive in!&lt;/p&gt;

&lt;h2&gt;Ruby Box: Isolation without abandoning Ruby’s flexibility&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.ruby-lang.org/en/master/Ruby/Box.html" rel="noopener noreferrer"&gt;Ruby Box&lt;/a&gt; introduces a way to evaluate code inside an isolated environment. This means constants, classes, and monkey patches defined in a box do not leak out unless you explicitly expose them.&lt;/p&gt;

&lt;p&gt;At a high level, Ruby Box is a formal mechanism for scoping global state.&lt;/p&gt;

&lt;h3&gt;Basic example&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;box = RubyBox.new

box.eval do
  class User
    def role
      :admin
    end
  end
end

defined?(User)
# =&amp;gt; nil
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Outside the box, &lt;code&gt;User&lt;/code&gt; does not exist.&lt;/p&gt;

&lt;h3&gt;Selectively exposing behavior&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;box = RubyBox.new

user_class = box.eval do
  class User
    def role
      :admin
    end

    self
  end
end

user = user_class.new
user.role
# =&amp;gt; :admin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;Why this matters in real applications&lt;/h3&gt;

&lt;p&gt;In legacy Rails apps, global state is often the hidden cost of change. Monkey patches, initializer side effects, and gem overrides accumulate quietly as tech debt over the years. Ruby Box gives us a new way to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run isolated test scenarios without polluting the global runtime&lt;/li&gt;
&lt;li&gt;Experiment with alternative implementations safely&lt;/li&gt;
&lt;li&gt;Evaluate upgrades to dependencies without forking the app&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is particularly relevant when incrementally modernizing older systems, which is exactly where we see the most rewrite pressure among new (and sometimes existing!) Planet Argon clients.&lt;/p&gt;

&lt;h2&gt;ZJIT: A new foundation for Ruby performance&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;RUBYOPT="--zjit" ruby app.rb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ruby 4.0 introduces ZJIT, a next-generation JIT compiler designed to be more maintainable and extensible than previous implementations.&lt;/p&gt;

&lt;p&gt;ZJIT is not yet a universal replacement for YJIT, but it establishes a clear direction. Because it’s a work in progress, it's not enabled by default just yet. Here is a quote from the release notes. &lt;em&gt;“ZJIT is faster than the interpreter, but not yet as fast as YJIT. We encourage you to experiment with ZJIT, but maybe hold off on deploying it in production for now. Stay tuned for Ruby 4.1 ZJIT.”&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;Enabling ZJIT&lt;/h3&gt;

&lt;h3&gt;What changes in practice&lt;/h3&gt;

&lt;p&gt;You do not write Ruby differently to use ZJIT. The benefit is structural, not syntactic. ZJIT introduces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A cleaner internal compiler architecture&lt;/li&gt;
&lt;li&gt;Larger compilation units&lt;/li&gt;
&lt;li&gt;A path to future optimizations that do not require rewriting Ruby code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For teams running mature applications, this matters because it provides immediate and actual performance in runtime evolution instead of theoretical gains that could maybe possibly potentially come with a risky application rewrite.&lt;/p&gt;

&lt;h2&gt;Ractors: Continued progress toward true parallelism&lt;/h2&gt;

&lt;p&gt;Ractors were introduced in Ruby 3.0. Ruby 4.0 refines the model and reduces internal contention, making parallel execution more practical.&lt;/p&gt;

&lt;h3&gt;Basic Ractor usage&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;r = Ractor.new do
  "Hello from another core"
end

r.take
# =&amp;gt; "Hello from another core"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;Structured communication with Ractor::Port&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;port = Ractor::Port.new

producer = Ractor.new(port) do |p|
  p.send("work item")
end

consumer = Ractor.new(port) do |p|
  p.receive
end

consumer.take
# =&amp;gt; "work item"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;Why this matters for Rails applications&lt;/h3&gt;

&lt;p&gt;Most Rails apps today rely on process-level concurrency. Ruby 4.0 continues the slow but intentional shift toward safer parallel execution within a single process.&lt;/p&gt;

&lt;p&gt;That unlocks future architectural options without forcing a move to an entirely different stack or runtime.&lt;/p&gt;

&lt;h2&gt;Core language and standard library improvements&lt;/h2&gt;

&lt;p&gt;Ruby 4.0 also includes a collection of smaller improvements that add up over time.&lt;/p&gt;

&lt;h3&gt;Improved conditionals&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if foo
  &amp;amp;&amp;amp; bar
  || baz
  do_work
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ruby 4.0 improves parsing and readability in complex multi-line expressions, reducing subtle bugs in legacy conditionals.&lt;/p&gt;

&lt;h3&gt;Array enhancements&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[1, 2, 3, 4].rfind(&amp;amp;:even?)
# =&amp;gt; 4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Small additions like this reduce custom utility code that often proliferates in older codebases.&lt;/p&gt;

&lt;h3&gt;Better error context&lt;/h3&gt;

&lt;p&gt;Ruby 4.0 enhances error messages by showing both caller and callee context, making it easier to debug layered systems.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def a
  b
end

def b
  raise "boom"
end

a
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The resulting stack trace now surfaces more actionable information, which is especially valuable in large applications with deep call chains.&lt;/p&gt;

&lt;h2&gt;Why We’re Excited about 4.0&lt;/h2&gt;

&lt;p&gt;At Planet Argon, most of our Ruby work starts with &lt;a href="https://www.planetargon.com/services/ruby-on-rails-development" rel="noopener noreferrer"&gt;systems that have a history&lt;/a&gt;, are in full use by a large customer base, and can’t afford a risky, drawn-out rewrite.&lt;/p&gt;

&lt;p&gt;Ruby 4.0 reinforces a belief we have held for years:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;You do not need to rewrite your application to modernize it.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We’ll be using the new 4.0 features to: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Help isolate risk (Box)&lt;/li&gt;
&lt;li&gt;Help performance evolve independently of application code (ZJIT)&lt;/li&gt;
&lt;li&gt;Get better concurrency out of Ruby apps (Ractors)&lt;/li&gt;
&lt;li&gt;Reduce friction in our everyday maintenance work &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And how about that! None of these requires throwing away working software. :) &lt;/p&gt;

&lt;h2&gt;Upgrade strategy: How we recommend teams approach Ruby 4.0&lt;/h2&gt;

&lt;p&gt;Upgrading to Ruby 4.0 should be treated as an engineering initiative, not a version bump.&lt;/p&gt;

&lt;p&gt;Here is the strategy we typically recommend.&lt;/p&gt;

&lt;h3&gt;1. Establish a behavioral baseline&lt;/h3&gt;

&lt;p&gt;Before upgrading, ensure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A reliable test suite&lt;/li&gt;
&lt;li&gt;CI visibility into failures&lt;/li&gt;
&lt;li&gt;Basic performance benchmarks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not about perfection. It is about confidence.&lt;/p&gt;

&lt;h3&gt;2. Upgrade Ruby before Rails&lt;/h3&gt;

&lt;p&gt;Move the Ruby version forward first while holding Rails constant where possible. This isolates runtime changes from framework changes, making failures easier to reason about.&lt;/p&gt;

&lt;h3&gt;3. Use Ruby Box experimentally&lt;/h3&gt;

&lt;p&gt;Do not start by restructuring your application. Use Ruby Box in test or tooling contexts first:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Isolated test execution&lt;/li&gt;
&lt;li&gt;Dependency experiments&lt;/li&gt;
&lt;li&gt;Refactoring spikes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Treat it as a safety tool, not a refactor mandate.&lt;/p&gt;

&lt;h3&gt;4. Measure, then enable JIT options&lt;/h3&gt;

&lt;p&gt;Evaluate YJIT and ZJIT in staging or production-like environments. Measure memory, CPU, and latency. Choose deliberately.&lt;/p&gt;

&lt;p&gt;Performance gains should be empirical, not assumed.&lt;/p&gt;

&lt;h3&gt;5. Avoid the rewrite trap&lt;/h3&gt;

&lt;p&gt;The biggest risk we see is teams using upgrades as justification for a rewrite. Ruby 4.0 explicitly reduces the need for that by improving the runtime itself.&lt;/p&gt;

&lt;p&gt;Modernization works best when it is incremental, observable, and reversible.&lt;/p&gt;

&lt;h2&gt;Closing thoughts&lt;/h2&gt;

&lt;p&gt;Ruby 4.0 seems designed for giving long-lived systems room to keep evolving. For teams maintaining legacy Ruby and Rails applications, this release is a reminder that stability and progress are not opposites. With the right strategy, they actually reinforce each other!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This post was originally shared on [Planet Argon's blog](&lt;a href="https://blog.planetargon.com/blog" rel="noopener noreferrer"&gt;https://blog.planetargon.com/blog&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>rails</category>
      <category>upgrade</category>
      <category>developer</category>
    </item>
    <item>
      <title>How to Demo Your Application to a New Development Team</title>
      <dc:creator>Autumn</dc:creator>
      <pubDate>Thu, 14 Aug 2025 19:00:23 +0000</pubDate>
      <link>https://dev.to/planetargon/how-to-demo-your-application-to-a-new-development-team-1dia</link>
      <guid>https://dev.to/planetargon/how-to-demo-your-application-to-a-new-development-team-1dia</guid>
      <description>&lt;p&gt;When you start &lt;a href="https://blog.planetargon.com/blog/entries/client-onboarding-what-to-expect-in-your-first-month-with-planet-argon" rel="noopener noreferrer"&gt;working with a new development team&lt;/a&gt;, one of the first and most valuable things you can do is walk them through your application. It's more than just clicking around—it's about sharing the story of your app: what it does, who it serves, and how it's built.&lt;/p&gt;

&lt;p&gt;We’ve seen a lot of client-led demos, and we’ve learned what makes them effective—and what leaves teams guessing. This post outlines a simple framework for &lt;strong&gt;walking a development team through your application&lt;/strong&gt;. It includes key talking points to help you deliver a clear and helpful overview that saves time and builds shared understanding from the start.&lt;/p&gt;

&lt;p&gt;We’ll cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to introduce your business and users.&lt;/li&gt;
&lt;li&gt;What technical details are most beneficial to share early on.&lt;/li&gt;
&lt;li&gt;What’s changed in your app recently—and what’s coming up.&lt;/li&gt;
&lt;li&gt;How to prepare the team for emergencies and escalations.&lt;/li&gt;
&lt;li&gt;What kind of support you need from the dev team week-to-week.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By the end, you’ll have a helpful checklist for your next application walkthrough.&lt;/p&gt;

&lt;h2&gt;1.  Start with the Big Picture: Your Business and Your Users&lt;/h2&gt;

&lt;p&gt;As the new team onboards to your application, it will be important to highlight the technical aspects of what the application does. However, something people often miss when demonstrating to a new team is explaining the why behind the application. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What business purpose does your app serve?&lt;/li&gt;
&lt;li&gt;Who are your users?&lt;/li&gt;
&lt;li&gt;What problems does it solve for them?&lt;/li&gt;
&lt;li&gt;How do you interact with those users?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Start from the 30,000-foot view:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“Our users are [x] who want a way to [y].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then, take on the personality of a daily user:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“So if I want to get [y] from the app, I would log in and navigate to [critical page #1] or [critical page #2].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Finally, show how your team engages with those users:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“As a customer service representative, we can pick up a user’s case and [do x] or [do y].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This context helps the engineering team understand &lt;em&gt;why&lt;/em&gt; they’re building and supporting the product, making it easier to navigate the app with purpose instead of aimlessly clicking around.&lt;/p&gt;

&lt;h2&gt;2. What Does the Application Do?&lt;/h2&gt;

&lt;p&gt;After covering what the application looks like for users and administrators, it is time to move over to the more technical functions of its structure. A senior engineer, CTO, or technical project manager would best lead this section of the demonstration. &lt;/p&gt;

&lt;p&gt;Here, we should aim to answer questions like: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where is the application hosted? &lt;/li&gt;
&lt;li&gt;Is there up-to-date documentation on how to set up the application? &lt;/li&gt;
&lt;li&gt;Are there important services that the onboarding team needs to be aware of (like Sidekiq Pro or AppSignal)?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here are a few key areas to touch on:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hosting and setup:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“When we have a new engineer starting, the first thing we ensure they have access to is [x].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application history:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“This started as a basic [code framework] app but has since expanded to include [other frameworks/tools].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important services:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“We use Sidekiq Pro for background jobs and AppSignal for monitoring.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Known quirks or exceptions:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“An important thing that may not be super clear in the documentation is [x], which exists for [y purpose].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build process:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“When a change is ready, the testing suite runs and then [x] happens.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;These insights give the onboarding team a strong technical foundation to begin working efficiently.&lt;/p&gt;

&lt;h2&gt;3. Where Does the Application Stand Today?&lt;/h2&gt;

&lt;p&gt;After giving the team an idea of what the business does and how the application is set up, it’s time to get into the current state. This section aims to give the team a healthy understanding of what new features have been implemented recently, any ongoing issues, and cover important things to be aware of for future work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s new:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“In the last three months, we added a new way for users to [x].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s wrong:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“We’ve been having issues with [x] and [y], which we [have/haven’t resolved yet].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s bothering you:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“It hasn’t happened in a while, but every few months, I worry about [x].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s coming:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“In the next two months, the Ops team would like to see [x] happen.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This helps the team prioritize their focus areas and understand where they can add the most value.&lt;/p&gt;

&lt;h2&gt;4. Preparing the team for emergencies&lt;/h2&gt;

&lt;p&gt;Emergencies are never fun, but they happen. Use this part of the demo to walk the team through what to do when something goes wrong.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What do you do when things go poorly? &lt;/li&gt;
&lt;li&gt;Where do you look if there is an outage? &lt;/li&gt;
&lt;li&gt;How have outages historically escalated to the engineers? &lt;/li&gt;
&lt;li&gt;Have there been recurring themes in the recent outages?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How escalations happen:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“Historically, [x person/people] are the first to tell us when something is wrong.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where to look:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“When we get a report, we start by checking [x]. That usually tells us [y].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recovery process:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“If we need to rollback to a previous version of the app or database, here’s how we typically do that.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Sharing your existing process gives your new team a sense of confidence and preparedness for when things break.&lt;/p&gt;

&lt;h2&gt;5. Helping Teams Help You&lt;/h2&gt;

&lt;p&gt;Finally, wrap up your demo by discussing what a successful working relationship looks like. Be clear about how you like to work, how you prefer to get updates, and what you expect from your dev partners.&lt;/p&gt;

&lt;p&gt;For more on how to build collaborative and inclusive developer relationships from day one, check out this episode of &lt;a href="https://maintainable.fm/episodes/april-wensel-navigating-legacy-code-with-compassion?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Maintainable Software Podcast with April Wensel&lt;/a&gt;, where she shares thoughtful insights on navigating legacy code with empathy and intention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cadence:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“Every Tuesday morning, our operations team meets to review priorities and plan the next few weeks. I need updates on [x] and any [y] incidents before that meeting.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Preferred processes:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“It’s easiest for me if updates are made in [x-way].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Escalation protocols:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“If there’s a new incident or outage, I’m responsible for notifying [x-people]. For that, I need to know [y] and [z].”&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;Making it happen 🚀&lt;/h2&gt;

&lt;p&gt;Demos don’t have to be polished or perfect, but they do need to be intentional. A clear, thoughtful walkthrough of your application helps your new engineering team get up to speed faster, make fewer assumptions, and deliver better work sooner.&lt;/p&gt;

&lt;p&gt;The more context you give, the more your development partners can support your business goals effectively.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>development</category>
    </item>
    <item>
      <title>How to Demo Your Application to a New Development Team: A Helpful Guide</title>
      <dc:creator>Autumn</dc:creator>
      <pubDate>Wed, 30 Jul 2025 18:42:36 +0000</pubDate>
      <link>https://dev.to/planetargon/how-to-demo-your-application-to-a-new-development-team-a-helpful-guide-5bnk</link>
      <guid>https://dev.to/planetargon/how-to-demo-your-application-to-a-new-development-team-a-helpful-guide-5bnk</guid>
      <description>&lt;p&gt;When you start &lt;a href="https://blog.planetargon.com/blog/entries/client-onboarding-what-to-expect-in-your-first-month-with-planet-argon" rel="noopener noreferrer"&gt;working with a new development team&lt;/a&gt;, one of the first and most valuable things you can do is walk them through your application. It's more than just clicking around—it's about sharing the story of your app: what it does, who it serves, and how it's built.&lt;/p&gt;

&lt;p&gt;We’ve seen a lot of client-led demos, and we’ve learned what makes them effective—and what leaves teams guessing. This post outlines a simple framework for &lt;strong&gt;walking a development team through your application&lt;/strong&gt;. It includes key talking points to help you deliver a clear and helpful overview that saves time and builds shared understanding from the start.&lt;/p&gt;

&lt;p&gt;We’ll cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to introduce your business and users.&lt;/li&gt;
&lt;li&gt;What technical details are most beneficial to share early on.&lt;/li&gt;
&lt;li&gt;What’s changed in your app recently—and what’s coming up.&lt;/li&gt;
&lt;li&gt;How to prepare the team for emergencies and escalations.&lt;/li&gt;
&lt;li&gt;What kind of support you need from the dev team week-to-week.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By the end, you’ll have a helpful checklist for your next application walkthrough.&lt;/p&gt;

&lt;h2&gt;1.  Start with the Big Picture: Your Business and Your Users&lt;/h2&gt;

&lt;p&gt;As the new team onboards to your application, it will be important to highlight the technical aspects of what the application does. However, something people often miss when demonstrating to a new team is explaining the why behind the application. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What business purpose does your app serve?&lt;/li&gt;
&lt;li&gt;Who are your users?&lt;/li&gt;
&lt;li&gt;What problems does it solve for them?&lt;/li&gt;
&lt;li&gt;How do you interact with those users?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Start from the 30,000-foot view:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“Our users are [x] who want a way to [y].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then, take on the personality of a daily user:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“So if I want to get [y] from the app, I would log in and navigate to [critical page #1] or [critical page #2].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Finally, show how your team engages with those users:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“As a customer service representative, we can pick up a user’s case and [do x] or [do y].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This context helps the engineering team understand &lt;em&gt;why&lt;/em&gt; they’re building and supporting the product, making it easier to navigate the app with purpose instead of aimlessly clicking around.&lt;/p&gt;

&lt;h2&gt;2. What Does the Application Do?&lt;/h2&gt;

&lt;p&gt;After covering what the application looks like for users and administrators, it is time to move over to the more technical functions of its structure. A senior engineer, CTO, or technical project manager would best lead this section of the demonstration. &lt;/p&gt;

&lt;p&gt;Here, we should aim to answer questions like: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where is the application hosted? &lt;/li&gt;
&lt;li&gt;Is there up-to-date documentation on how to set up the application? &lt;/li&gt;
&lt;li&gt;Are there important services that the onboarding team needs to be aware of (like Sidekiq Pro or AppSignal)?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here are a few key areas to touch on:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hosting and setup:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“When we have a new engineer starting, the first thing we ensure they have access to is [x].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application history:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“This started as a basic [code framework] app but has since expanded to include [other frameworks/tools].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important services:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“We use Sidekiq Pro for background jobs and AppSignal for monitoring.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Known quirks or exceptions:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“An important thing that may not be super clear in the documentation is [x], which exists for [y purpose].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build process:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“When a change is ready, the testing suite runs and then [x] happens.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;These insights give the onboarding team a strong technical foundation to begin working efficiently.&lt;/p&gt;

&lt;h2&gt;3. Where Does the Application Stand Today?&lt;/h2&gt;

&lt;p&gt;After giving the team an idea of what the business does and how the application is set up, it’s time to get into the current state. This section aims to give the team a healthy understanding of what new features have been implemented recently, any ongoing issues, and cover important things to be aware of for future work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s new:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“In the last three months, we added a new way for users to [x].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s wrong:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“We’ve been having issues with [x] and [y], which we [have/haven’t resolved yet].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s bothering you:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“It hasn’t happened in a while, but every few months, I worry about [x].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s coming:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“In the next two months, the Ops team would like to see [x] happen.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This helps the team prioritize their focus areas and understand where they can add the most value.&lt;/p&gt;

&lt;h2&gt;4. Preparing the team for emergencies&lt;/h2&gt;

&lt;p&gt;Emergencies are never fun, but they happen. Use this part of the demo to walk the team through what to do when something goes wrong.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What do you do when things go poorly? &lt;/li&gt;
&lt;li&gt;Where do you look if there is an outage? &lt;/li&gt;
&lt;li&gt;How have outages historically escalated to the engineers? &lt;/li&gt;
&lt;li&gt;Have there been recurring themes in the recent outages?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How escalations happen:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“Historically, [x person/people] are the first to tell us when something is wrong.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where to look:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“When we get a report, we start by checking [x]. That usually tells us [y].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recovery process:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“If we need to rollback to a previous version of the app or database, here’s how we typically do that.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Sharing your existing process gives your new team a sense of confidence and preparedness for when things break.&lt;/p&gt;

&lt;h2&gt;5. Helping Teams Help You&lt;/h2&gt;

&lt;p&gt;Finally, wrap up your demo by discussing what a successful working relationship looks like. Be clear about how you like to work, how you prefer to get updates, and what you expect from your dev partners.&lt;/p&gt;

&lt;p&gt;For more on how to build collaborative and inclusive developer relationships from day one, check out this episode of &lt;a href="https://maintainable.fm/episodes/april-wensel-navigating-legacy-code-with-compassion?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Maintainable Software Podcast with April Wensel&lt;/a&gt;, where she shares thoughtful insights on navigating legacy code with empathy and intention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cadence:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“Every Tuesday morning, our operations team meets to review priorities and plan the next few weeks. I need updates on [x] and any [y] incidents before that meeting.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Preferred processes:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“It’s easiest for me if updates are made in [x-way].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Escalation protocols:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“If there’s a new incident or outage, I’m responsible for notifying [x-people]. For that, I need to know [y] and [z].”&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;Making it happen 🚀&lt;/h2&gt;

&lt;p&gt;Demos don’t have to be polished or perfect, but they do need to be intentional. A clear, thoughtful walkthrough of your application helps your new engineering team get up to speed faster, make fewer assumptions, and deliver better work sooner.&lt;/p&gt;

&lt;p&gt;The more context you give, the more your development partners can support your business goals effectively.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>development</category>
      <category>tutorial</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Deploying a Ruby on Rails app to DigitalOcean Using Kamal</title>
      <dc:creator>Autumn</dc:creator>
      <pubDate>Thu, 24 Jul 2025 00:11:37 +0000</pubDate>
      <link>https://dev.to/planetargon/deploying-a-ruby-on-rails-app-to-digitalocean-using-kamal-14ec</link>
      <guid>https://dev.to/planetargon/deploying-a-ruby-on-rails-app-to-digitalocean-using-kamal-14ec</guid>
      <description>&lt;p&gt;If you’re deploying Ruby on Rails applications to the cloud, you may have explored tools to simplify and streamline the process. Recently, we’ve been experimenting with &lt;strong&gt;Kamal&lt;/strong&gt;, a tool for deploying containerized applications, and we’re excited to share our experience with deploying a Rails app to &lt;strong&gt;DigitalOcean&lt;/strong&gt; using their &lt;strong&gt;Managed Database&lt;/strong&gt; service.&lt;/p&gt;

&lt;p&gt;This post introduces Kamal, explains why it’s worth exploring, and walks you through a sample deployment configuration to demystify Kamal and help you decide if it’s the right tool for your next project.&lt;/p&gt;

&lt;h2&gt;What Is Kamal?&lt;/h2&gt;

&lt;p&gt;Here's how the &lt;a href="https://kamal-deploy.org/" rel="noopener noreferrer"&gt;official Kamal documentation&lt;/a&gt; describes it:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Kamal offers zero-downtime deploys, rolling restarts, asset bridging, remote builds, accessory service management, and everything else you need to deploy and manage your web app in production with Docker. Originally built for Rails apps, Kamal will work with any type of web app that can be containerized.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In simpler terms, Kamal is a deployment tool designed for containerized applications. Whether you’re managing Rails apps or other containerized projects, Kamal handles complex tasks like asset management, remote builds, and service orchestration. It provides powerful features for those looking to avoid the overhead of Kubernetes while still leveraging Docker-based workflows.&lt;/p&gt;

&lt;h2&gt;The Case for Kamal: Why It’s Worth Exploring&lt;/h2&gt;

&lt;p&gt;You may have heard Kamal described as a "Capistrano-like tool for containerized apps." While that description is somewhat accurate, Kamal is much more than that. It stands out for developers who:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Want a simpler alternative to Capistrano.&lt;/li&gt;
&lt;li&gt;Are focused on lightweight deployment workflows.&lt;/li&gt;
&lt;li&gt;Appreciate a tool that integrates deeply with Rails (but also supports other frameworks).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Kamal offers several unique advantages, making it a compelling choice for deploying containerized applications.&lt;/p&gt;

&lt;h3&gt;Optimized for Rails&lt;/h3&gt;

&lt;p&gt;Kamal was initially built with Ruby on Rails in mind, offering built-in support for Rails conventions. But it’s versatile enough to work with any containerized web app, making it a great fit for diverse tech stacks.&lt;/p&gt;

&lt;h3&gt;Rails 8 Integration&lt;/h3&gt;

&lt;p&gt;Kamal is tightly integrated with Rails 8, coming pre-installed and leveraging new features like simplified containerization out of the box. This reduces setup time and ensures compatibility with the latest Rails conventions.&lt;/p&gt;

&lt;h3&gt;Streamlined Asset Management&lt;/h3&gt;

&lt;p&gt;Kamal automates asset bridging between deployment versions, ensuring static files like CSS and JavaScript are handled seamlessly without downtime. This eliminates the manual asset precompilation headaches often encountered in traditional workflows.&lt;/p&gt;

&lt;h3&gt;Easy Environment Management&lt;/h3&gt;

&lt;p&gt;With Kamal, environment variables and secrets are centralized in .kamal/secrets, simplifying managing production settings across servers. This reduces configuration drift and enhances security by keeping sensitive data out of version control.&lt;/p&gt;

&lt;h3&gt;A Modern Alternative to Capistrano&lt;/h3&gt;

&lt;p&gt;Kamal modernizes deployment by replacing Capistrano’s script-based approach with a Docker-centric workflow, offering better scalability and consistency. It’s easier to set up for containerized apps while retaining the simplicity Capistrano users love.&lt;/p&gt;

&lt;h3&gt;Flexible Support for Managed Databases&lt;/h3&gt;

&lt;p&gt;Kamal integrates effortlessly with managed database services like DigitalOcean’s, allowing you to configure database connections via environment variables without managing database containers. This flexibility simplifies infrastructure while leveraging cloud provider reliability.&lt;/p&gt;

&lt;h3&gt;Ideal for Small Teams or Solo Devs&lt;/h3&gt;

&lt;p&gt;Kamal’s lightweight design and minimal setup make it perfect for small teams or solo developers who need efficient deployments without the complexity of Kubernetes. It balances power and simplicity, reducing the learning curve for resource-constrained projects.&lt;/p&gt;

&lt;h3&gt;Developer-Friendly Debugging Tools&lt;/h3&gt;

&lt;p&gt;Kamal provides commands that give developers quick access to runtime diagnostics and interactive troubleshooting. These tools streamline issue resolution without requiring external monitoring setups.&lt;/p&gt;

&lt;h3&gt;Active Community and Documentation&lt;/h3&gt;

&lt;p&gt;Kamal benefits from a growing community on GitHub and comprehensive official documentation, offering quick support and detailed guides for both beginners and advanced users. This ecosystem ensures you’re never stuck when exploring its features.&lt;/p&gt;

&lt;h2&gt;Why We Chose a Managed Database Instead of a Database Container&lt;/h2&gt;

&lt;p&gt;Choosing a managed database service was a deliberate decision that has made our deployment process much simpler and more efficient. With DigitalOcean’s managed database service, many of the operational headaches of managing a database—like backups, scaling, and connection management—are handled automatically. This not only saves time but also ensures that the service provider professionally manages critical tasks like disaster recovery and high availability.&lt;/p&gt;

&lt;p&gt;Managed databases also remove the need to configure and maintain database containers, which can be tricky to set up correctly, especially for production environments. Instead of worrying about things like replication, version upgrades, and performance tuning, you can focus entirely on building and improving your application. This approach is a game-changer for small-to-medium apps, where development resources might be limited. It allows developers to deploy confidently, knowing that the database infrastructure is reliable, scalable, and secure.&lt;/p&gt;

&lt;p&gt;In our case, DigitalOcean’s managed database service was particularly appealing because of its seamless integration with other DigitalOcean products, intuitive user interface, and competitive pricing. Setting up the database was straightforward, and connecting it to the Rails app required only minor adjustments to configuration files. This simplicity made it easy to get the app up and running quickly, without spending hours on infrastructure setup.&lt;/p&gt;

&lt;p&gt;If you're deploying small or medium-sized apps or new to cloud deployments, managed databases are worth considering. They offer a balance of simplicity and robustness that’s hard to achieve with self-managed solutions.&lt;/p&gt;

&lt;h2&gt;Getting Started with Kamal - Tips, Tools, and Insider Know-How&lt;/h2&gt;

&lt;p&gt;Kamal is designed to make deployments simple and efficient, but setting up a new tool can always feel a little daunting. Here’s how to get started with Kamal and some helpful tips to make the process smoother.&lt;/p&gt;

&lt;h3&gt;Prepare Your Environment&lt;/h3&gt;

&lt;p&gt;Before diving in, ensure you have the following tools and concepts ready:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Docker Installed and Configured&lt;/strong&gt;: Kamal relies on Docker to build and run containers, so install Docker and familiarize yourself with basics like creating a &lt;strong&gt;Dockerfile&lt;/strong&gt; and running containers. Test it locally with &lt;strong&gt;docker run hello-world&lt;/strong&gt; to confirm it’s working.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSH Access to Your Server&lt;/strong&gt;: Kamal uses SSHKit to communicate with your server, so set up SSH keys and verify access with &lt;strong&gt;ssh user@your-server-ip&lt;/strong&gt;. Passwordless login via keys is recommended for automation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A Cloud Service Provider&lt;/strong&gt;: Decide where you’ll host your app. Kamal works seamlessly with AWS, Google Cloud Platform, DigitalOcean, and more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A Deployed App or Sample Rails App&lt;/strong&gt;: To experiment with Kamal, it helps to have a simple Rails app ready to deploy.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Install Kamal&lt;/h3&gt;

&lt;p&gt;If you’re using Ruby on Rails 8, Kamal comes pre-installed in your app. For older versions or other frameworks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add Kamal to your Gemfile:
&lt;code&gt;gem 'kamal'&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;bundle install&lt;/code&gt; to install the gem.
&lt;/li&gt;
&lt;li&gt;Initialize Kamal with:
&lt;code&gt;kamal init&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This generates &lt;strong&gt;config/deploy.yml&lt;/strong&gt; (your deployment blueprint) and &lt;strong&gt;.kamal/secrets&lt;/strong&gt; (for sensitive data). Add &lt;strong&gt;.kamal/&lt;/strong&gt; to &lt;strong&gt;.gitignore&lt;/strong&gt; to keep secrets out of version control.&lt;/p&gt;

&lt;h3&gt;Configure Your &lt;code&gt;deploy.yml&lt;/code&gt; File&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;deploy.yml&lt;/strong&gt; file defines how Kamal deploys your app. Here’s a starter example for a Rails app on DigitalOcean with a managed database:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;service: my-app
image: username/my-app:1.0.0
servers:
  web:
    - 192.168.1.100  # Replace with your server IP
env:
  secret:
    - RAILS_MASTER_KEY
    - PRODUCTION_DB_HOST
registry:
  username: username
  password:
    - KAMAL_REGISTRY_PASSWORD   
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To connect your Rails app to a managed database like DigitalOcean’s, grab the host, username, and password from your provider’s dashboard, store them in &lt;strong&gt;.kamal/secrets&lt;/strong&gt;, and reference them in &lt;strong&gt;deploy.yml&lt;/strong&gt; under &lt;strong&gt;env.secret&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro Tips:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Service Name&lt;/strong&gt;: Match it to your app’s repository name (e.g., &lt;strong&gt;my-app&lt;/strong&gt;) for consistency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image Tagging&lt;/strong&gt;: Use specific versions (e.g., 1.0.0) instead of the latest for easier rollbacks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secrets&lt;/strong&gt;: Store sensitive values like &lt;strong&gt;RAILS_MASTER_KEY&lt;/strong&gt; and &lt;strong&gt;PRODUCTION_DB_HOST&lt;/strong&gt; in &lt;strong&gt;.kamal/secrets&lt;/strong&gt;, not the YAML file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Roles&lt;/strong&gt;: Add &lt;strong&gt;workers:&lt;/strong&gt; under &lt;strong&gt;servers&lt;/strong&gt; if using background jobs (e.g., Sidekiq).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Understand the Deployment Workflow&lt;/h3&gt;

&lt;p&gt;Kamal uses a &lt;strong&gt;simple yet powerful workflow&lt;/strong&gt; for deployments:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Build the Docker Image&lt;/strong&gt;: Kamal builds your app’s image locally or remotely (configurable in &lt;strong&gt;deploy.yml&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Push to a Registry&lt;/strong&gt;: Upload the image to DockerHub or another registry specified in the registry section.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploy&lt;/strong&gt;: Run: &lt;strong&gt;kamal deploy&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This pulls the image to your server, starts containers, and &lt;strong&gt;performs a rolling restart for zero downtime&lt;/strong&gt;. If using accessories (e.g., Redis), they’re deployed automatically—no separate accessories flag is needed unless isolating specific updates.&lt;/p&gt;

&lt;h3&gt;Master Kamal’s Debugging Tools&lt;/h3&gt;

&lt;p&gt;Kamal includes several built-in commands to simplify debugging:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Logs&lt;/strong&gt;: View real-time output with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kamal logs -f
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Rails Console:&lt;/strong&gt; Debug interactively on the server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kamal app exec --interactive "bin/rails console"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Shell Access&lt;/strong&gt;: Inspect the container directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kamal app exec --interactive bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;Work with Accessories&lt;/h3&gt;

&lt;p&gt;For services like Redis or Sidekiq, define them as accessories in &lt;strong&gt;deploy.yml&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;accessories:
  redis:
    image: redis:latest
    host: 192.168.1.100
    port: 6379
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Deploy with Kamal deploy, and Kamal manages them alongside your app. Add volumes or environment variables as needed for persistence or configuration.&lt;/p&gt;

&lt;h3&gt;Example Configuration for Deploying with Kamal&lt;/h3&gt;

&lt;p&gt;Here’s the deploy.yml for a Rails app on DigitalOcean with their managed database:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;service: my-rails-app
image: myusername/my-rails-app:1.0.0
servers:
  web:
    - your-droplet-ip  # From DigitalOcean dashboard
env:
  secret:
    - RAILS_MASTER_KEY
    - PRODUCTION_DB_HOST
registry:
  username: myusername
  password:
    - KAMAL_REGISTRY_PASSWORD
accessories:
  redis:
    image: redis:latest
    host: your-droplet-ip
    port: 6379
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;Kamal's Community and Documentation&lt;/h3&gt;

&lt;p&gt;Using a new tool can be much easier with a strong community and resources at your fingertips. Kamal offers both, making learning, troubleshooting, and exploring advanced features simple. Whether you are looking for quick answers, detailed guidance, or inspiration from other developers, tapping into Kamal’s community and documentation will accelerate your journey to mastering this powerful deployment tool.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visit the &lt;a href="https://github.com/basecamp/kamal" rel="noopener noreferrer"&gt;Kamal GitHub repository&lt;/a&gt; to connect with other users and get quick support.&lt;/li&gt;
&lt;li&gt;Explore the&lt;a href="https://kamal-project-url.com" rel="noopener noreferrer"&gt; official Kamal documentation&lt;/a&gt; for advanced features, like load balancing and remote builds.&lt;/li&gt;
&lt;li&gt;Follow developers sharing tips on GitHub or blogs (like this one!).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Ready to give Kamal a try?&lt;/h2&gt;

&lt;p&gt;Explore Kamal's features, or experiment with a simple app to see how it fits your workflow. Whether managing small apps or planning larger deployments, tools like Kamal and managed databases can save you time and effort. Take the first step by trying it out on your next project—you might just discover your new favorite deployment tool! You might even want to check out the Maintainable Podcast episode &lt;a href="https://maintainable.fm/episodes/martin-emde-ruby-central-and-the-art-of-being-tolerant-to-change" rel="noopener noreferrer"&gt;'Martin Emde – Ruby Central and the Art of Being Tolerant to Change'&lt;/a&gt;, where Martin shares insights on effectively managing changes and complexity in Ruby applications.&lt;/p&gt;

</description>
      <category>kamal</category>
      <category>rails</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Managing Tech Debt with a Custom VS Code Extension</title>
      <dc:creator>Autumn</dc:creator>
      <pubDate>Thu, 17 Jul 2025 20:07:04 +0000</pubDate>
      <link>https://dev.to/autumn_tonita/managing-tech-debt-with-a-custom-vs-code-extension-38hf</link>
      <guid>https://dev.to/autumn_tonita/managing-tech-debt-with-a-custom-vs-code-extension-38hf</guid>
      <description>&lt;p&gt;The Planet Argon engineering team has always faced a common but annoying challenge when tackling technical debt management – when an engineer spotted a refactor opportunity during their coding sessions, they would have to create Jira tickets to track it manually. Switching back and forth from VSCode to Jira like that created several problems for our team:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Context Loss&lt;/strong&gt;: Important details such as file location, line numbers, and the actual code snippet were frequently omitted when creating tickets for tracking tech debt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflow Disruption&lt;/strong&gt;: Developers had to switch between VS Code and Jira, breaking their focus and reducing productivity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inconsistent Documentation&lt;/strong&gt;: Technical debt items varied greatly in quality and detail without a standardized process.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We needed a solution that would integrate directly into our development environment and streamline the entire process of capturing and documenting technical debt.&lt;/p&gt;

&lt;h2&gt;Our Solution: Cherrybomb VS Code Extension&lt;/h2&gt;

&lt;p&gt;To bridge this gap, we built Cherrybomb, a custom VS Code extension designed specifically to capture technical debt at the moment of discovery. Here’s why we’re excited about it.&lt;/p&gt;

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

&lt;p&gt;We started with a &lt;strong&gt;status bar integration&lt;/strong&gt; that remains visible whenever VS Code is open. This gives developers a constant, unobtrusive reminder that they can quickly flag technical debt. When they spot problematic code, they simply highlight it and click the status bar icon.&lt;/p&gt;

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

&lt;p&gt;Behind the scenes, Cherrybomb immediately performs &lt;strong&gt;automatic context capture&lt;/strong&gt;, collecting the selected code snippet, the file path, and exact line numbers. This ensures no critical information is lost.&lt;/p&gt;

&lt;p&gt;The extension then displays an &lt;strong&gt;interactive webview form&lt;/strong&gt; within VS Code that includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A dropdown menu populated with our active Jira projects.&lt;/li&gt;
&lt;li&gt;Fields for the issue title and description.&lt;/li&gt;
&lt;li&gt;A preview of the captured context information.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;When the developer submits the form, Cherrybomb authenticates with our Jira Cloud instance and creates a new comprehensive Jira issue that contains all the information collected in the IDE as well as a &lt;code&gt;via-cherrybomb&lt;/code&gt; label that makes it easy to filter and find these issues later.&lt;/p&gt;

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

&lt;p&gt;We packaged the extension as a VSIX file and distributed it internally via a secure file-sharing system. This lets our team install and use it without having to publish it to the public VS Code extension marketplace.&lt;/p&gt;

&lt;h2&gt;Transforming How We Handle Technical Debt&lt;/h2&gt;

&lt;p&gt;Implementing Cherrybomb transformed our approach to technical debt in several ways.&lt;/p&gt;

&lt;p&gt;The most immediate benefit was the elimination of context switching. Developers could now document technical debt without leaving VS Code, letting them keep their focus and create tech debt issues when they have the most context and understanding of the problem.&lt;/p&gt;

&lt;p&gt;The quality of our documentation also improved. Every issue now includes precise code snippets, exact file locations, and line numbers. This makes future fixes more efficient, even when addressed by different team members.&lt;/p&gt;

&lt;p&gt;Our standardized reporting structure has also improved how we prioritize technical debt across projects. Team leads can now make more informed decisions about which issues to address in upcoming sprints based on consistent, detailed documentation.&lt;/p&gt;

&lt;p&gt;The impact on team productivity has been significant:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Time Savings&lt;/strong&gt;: Developers spend less time on administrative tasks and more time writing quality code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced Collaboration&lt;/strong&gt;: Clear, contextual issue tracking has improved communication between team members&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge Sharing&lt;/strong&gt;: Detailed technical debt tickets serve as learning opportunities for newer team members&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;The Evolution of Cherrybomb&lt;/h2&gt;

&lt;p&gt;While Cherrybomb has already made a substantial impact on our workflow, we see several opportunities for enhancement:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Feature Expansion&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding more formatting options to the webview form for richer issue descriptions&lt;/li&gt;
&lt;li&gt;Integrating additional Jira data fields like fix versions and custom labels&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Integration Improvements&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connecting with other internal tools to create a more comprehensive technical debt management system&lt;/li&gt;
&lt;li&gt;Adding Git integration to capture branch names and automatically update associated Jira issues when code snippets or branches change &lt;/li&gt;
&lt;li&gt;Enhancing error reporting and handling for a smoother user experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;User-Driven Refinement&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ongoing collection of feedback from our engineering team to identify friction points&lt;/li&gt;
&lt;li&gt;Iterative UI improvements based on real-world usage patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Small Tools, Big Impact&lt;/h2&gt;

&lt;p&gt;Cherrybomb demonstrates that committing to solving very specific workflow problems can have outsized effects on your team’s productivity and code quality. By embedding technical debt management directly into the development environment, we not only improved our documentation and saved time, but we also built our values of code quality and thoughtful refactoring into our devs’ workflows. The success of this project has also inspired us to look for other aspects of our development process that could benefit from similar streamlining. &lt;/p&gt;

&lt;p&gt;Did this helpful little tool solve all of our tech debt or dev workflow problems? Of course not. But sometimes the most effective improvements aren't huge sweeping platform changes or introducing new processes. Sometimes, all it takes is building a focused tool that removes specific friction points from everyday workflows.&lt;/p&gt;

&lt;p&gt;If you're interested in how we help clients tackle technical debt and improve their development workflows, check out our case studies on&lt;a href="https://www.planetargon.com/work/walkenhorst-s" rel="noopener noreferrer"&gt; Walkenhorst's&lt;/a&gt;,&lt;a href="https://www.planetargon.com/work/i-will-teach-you-to-be-rich" rel="noopener noreferrer"&gt; I Will Teach You to Be Rich&lt;/a&gt;, and&lt;a href="https://www.planetargon.com/work/newspaper-club" rel="noopener noreferrer"&gt; Newspaper Club&lt;/a&gt;. Each illustrates our commitment to building maintainable, efficient systems.&lt;/p&gt;




&lt;h2&gt;We Think You’ll Also Enjoy Reading…&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.planetargon.com/blog/entries/what-are-common-traits-of-maintainable-software" rel="noopener noreferrer"&gt;What are Common Traits of Maintainable Software?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.planetargon.com/blog/entries/prepare-to-tack-steering-rails-apps-out-of-technical-debt-rails-world-2024" rel="noopener noreferrer"&gt;Prepare to Tack: Steering Rails Apps out of Technical Debt - Rails World 2024&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.planetargon.com/blog/entries/what-value-is-a-ruby-on-rails-code-audit" rel="noopener noreferrer"&gt;What Value Is A Ruby on Rails Code Audit?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;FAQs&lt;/h2&gt;

&lt;h3&gt;Q. Can your internal tools like Cherrybomb be adapted for client use?&lt;/h3&gt;

&lt;p&gt;A. While Cherrybomb is currently an internal tool, its success reflects our broader approach: build or integrate lightweight solutions that reduce friction in everyday workflows. For clients, we often customize tools, recommend integrations, or advise on process improvements to help your team manage tech debt more effectively.&lt;/p&gt;

&lt;h3&gt;Q. What types of clients benefit most from your technical debt management process?&lt;/h3&gt;

&lt;p&gt;A. We work best with companies that have long-standing Ruby on Rails applications and want to modernize their codebase. Whether your team is bogged down by legacy code or planning a major upgrade, we bring a thoughtful, practical approach to identifying and tackling the right pieces of debt at the right time.&lt;/p&gt;

&lt;h3&gt;Q. What benefits has your team seen since using Cherrybomb?&lt;/h3&gt;

&lt;p&gt;A. We’ve seen significant improvements in developer focus, consistency in technical debt documentation, and team-wide collaboration. Cherrybomb has helped us prioritize tech debt more effectively and reduced time spent on manual ticket creation.&lt;/p&gt;

&lt;h3&gt;Q. Is Cherrybomb available to the public?&lt;/h3&gt;

&lt;p&gt;A. No, Cherrybomb was developed as an internal tool and is currently only distributed to our team via a secure file-sharing system. We’ve packaged it as a .vsix file for easy internal installation. But we &lt;em&gt;do&lt;/em&gt; build custom tools for our clients.&lt;/p&gt;

&lt;p&gt;*&lt;a href="https://blog.planetargon.com/blog" rel="noopener noreferrer"&gt;This post was originally shared on Planet Argon's blog.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>techdebt</category>
      <category>legacy</category>
    </item>
    <item>
      <title>Linear and Jira: Making the Right Call for Your Team’s Workflow</title>
      <dc:creator>Autumn</dc:creator>
      <pubDate>Wed, 09 Jul 2025 17:12:56 +0000</pubDate>
      <link>https://dev.to/planetargon/linear-and-jira-making-the-right-call-for-your-teams-workflow-7me</link>
      <guid>https://dev.to/planetargon/linear-and-jira-making-the-right-call-for-your-teams-workflow-7me</guid>
      <description>&lt;p&gt;When it comes to project management tools, the choice between &lt;a href="https://linear.app/" rel="noopener noreferrer"&gt;Linear&lt;/a&gt; and &lt;a href="https://www.atlassian.com/software/jira" rel="noopener noreferrer"&gt;Jira&lt;/a&gt; isn't just about features—it's about how your team works best. Do you need a lightweight, developer-friendly experience or a platform capable of handling complex workflows and extensive reporting? Understanding the nuances of each tool can help ensure your team stays productive and efficient. Let's explore the key differences, real-world applications, and how to determine which one aligns best with your organization's needs.&lt;/p&gt;

&lt;h2&gt;Understanding Your Organization's Needs&lt;/h2&gt;

&lt;h3&gt;Size and Structure Matter&lt;/h3&gt;

&lt;p&gt;Your organization's size and structure are important factors when deciding between Linear and Jira. Are you a lean startup with a flat hierarchy? Or are you a large corporation with layers of middle management and a matrix structure?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Linear&lt;/strong&gt; excels in simplicity and minimalism, making it an excellent choice for smaller teams or companies with streamlined decision-making.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jira&lt;/strong&gt;, on the other hand, offers customization and reporting capabilities, ideal for large organizations with complex workflows and multiple stakeholders.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Who Needs Access?&lt;/h3&gt;

&lt;p&gt;Another consideration is who will use the tool and how. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Linear&lt;/strong&gt; is designed with developers in mind. Its Slack integrations, team-managed projects, and focus on triage make it perfect for teams prioritizing speed and collaboration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jira&lt;/strong&gt; is better suited for organizations where transparency and accountability extend to many layers, from operations to engineering managers and beyond.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Insights from Real-World Use Cases&lt;/h2&gt;

&lt;h3&gt;Linear in Action&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/michael-kurt-a5964520/" rel="noopener noreferrer"&gt;Michael Kurt, our Project Manager,&lt;/a&gt; shared how Linear’s features can simplify workflows:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Using Linear's Triage and Slack integrations, teams can easily manage incoming tasks and stay updated. The system encourages thoughtful comments and careful communication by connecting Linear comments to Slack tags, making collaboration seamless."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Linear also allows team-specific setups, where each product team operates independently without overlapping tickets. This compartmentalization can reduce noise and foster focused collaboration.&lt;/p&gt;

&lt;h3&gt;Jira’s Strengths&lt;/h3&gt;

&lt;p&gt;For larger corporations, &lt;a href="https://blog.planetargon.com/blog/entries/the-tools-that-make-our-agency-tick-jira" rel="noopener noreferrer"&gt;Jira's robust capabilities shine&lt;/a&gt;. As Michael observed:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For companies with a structure like Operations &amp;gt; Product Manager &amp;gt; Project Manager &amp;gt; Engineering Manager &amp;gt; Pod Lead, Jira's extensive customization options ensure everyone's needs are met. However, it can become overwhelming if too many layers are involved in ticket management."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Jira's detailed reporting and dashboard features make it a favorite for organizations that need to &lt;a href="https://blog.planetargon.com/blog/entries/task-based-vs-duration-based-planning-with-parallax-and-jira" rel="noopener noreferrer"&gt;monitor progress across multiple teams and departments&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Key Questions to Ask&lt;/h2&gt;

&lt;h3&gt;What Are Your Growth Goals?&lt;/h3&gt;

&lt;p&gt;If your company is scaling rapidly, consider the future:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Will adding more layers to your structure require a tool with broader reporting capabilities?&lt;/li&gt;
&lt;li&gt;Do you prioritize lightweight tools to maintain agility as you grow?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;How Much Transparency Do You Need?&lt;/h3&gt;

&lt;p&gt;Both tools offer transparency, but in different ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linear's Slack integration keeps communication tight within teams.&lt;/li&gt;
&lt;li&gt;Jira's dashboards and reports are ideal for sharing progress with external stakeholders and leadership.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;The Verdict: Linear or Jira?&lt;/h2&gt;

&lt;p&gt;There's no one-size-fits-all answer, but here's a quick summary:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
   &lt;td&gt;
&lt;strong&gt;Factor&lt;/strong&gt;
   &lt;/td&gt;
   &lt;td&gt;
&lt;strong&gt;Linear&lt;/strong&gt;
   &lt;/td&gt;
   &lt;td&gt;
&lt;strong&gt;Jira&lt;/strong&gt;
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;
&lt;strong&gt;Team Size&lt;/strong&gt;
   &lt;/td&gt;
   &lt;td&gt;Small to mid-sized teams
   &lt;/td&gt;
   &lt;td&gt;Large, complex organizations
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;
&lt;strong&gt;Hierarchy&lt;/strong&gt;
   &lt;/td&gt;
   &lt;td&gt;Flat or minimal layers
   &lt;/td&gt;
   &lt;td&gt;Matrix or multi-layered structures
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;
&lt;strong&gt;Transparency Needs&lt;/strong&gt;
   &lt;/td&gt;
   &lt;td&gt;Team-level visibility
   &lt;/td&gt;
   &lt;td&gt;Organization-wide reporting
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;
&lt;strong&gt;Ease of Use&lt;/strong&gt;
   &lt;/td&gt;
   &lt;td&gt;Simple and intuitive
   &lt;/td&gt;
   &lt;td&gt;Robust but can be overwhelming
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;
&lt;strong&gt;Integrations&lt;/strong&gt;
   &lt;/td&gt;
   &lt;td&gt;Excellent Slack integration
   &lt;/td&gt;
   &lt;td&gt;Wide range of integrations
   &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;Still Undecided? Test Both&lt;/h3&gt;

&lt;p&gt;Both Linear and Jira offer trial periods. Engage your team and run a pilot project with each tool. Pay attention to ease of onboarding, user adoption, and how well each tool supports your workflows.&lt;/p&gt;

&lt;p&gt;Choosing between Linear and Jira requires understanding your organization's size, structure, and goals. Whether you aim for efficiency or comprehensive control, the right tool can help your teams do their best work. Take the time to evaluate your needs—your future self (and your team) will thank you.   &lt;/p&gt;




&lt;h2&gt;Further Reading&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://blog.planetargon.com/blog/entries/jira-roundup-all-of-our-jira-knowledge-in-one-spot?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Jira Roundup: All of Our Jira Knowledge in One Spot:&lt;/a&gt;&lt;/strong&gt; A comprehensive compilation of articles and insights related to Jira, offering a wealth of knowledge on best practices, templates, and practical usage strategies. &lt;/p&gt;

&lt;p&gt;This post originally appeared on &lt;a href="https://blog.planetargon.com/blog" rel="noopener noreferrer"&gt;Planet Argon's blog.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>projectmanagement</category>
      <category>remoteteams</category>
    </item>
    <item>
      <title>Hotwire for Rails Developers: Keeping UI Fast and Maintainable</title>
      <dc:creator>Autumn</dc:creator>
      <pubDate>Thu, 22 May 2025 16:11:15 +0000</pubDate>
      <link>https://dev.to/planetargon/hotwire-for-rails-developers-keeping-ui-fast-and-maintainable-28e4</link>
      <guid>https://dev.to/planetargon/hotwire-for-rails-developers-keeping-ui-fast-and-maintainable-28e4</guid>
      <description>&lt;h2&gt;The Challenge of Modern Frontend in Rails&lt;/h2&gt;

&lt;p&gt;Rails developers often face a dilemma: &lt;em&gt;Should they stick with built-in Rails tools or go all-in on React for interactivity?&lt;/em&gt; The rise of JavaScript-heavy apps has made Rails projects harder to maintain. Many teams feel forced to separate the frontend and backend, leading to extra complexity, API management, and more dependencies to manage. &lt;a href="https://blog.planetargon.com/blog/entries/ruby-on-rails-vs-react-finding-the-perfect-fit-for-your-web-development-project?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;While React is powerful&lt;/a&gt;, it often adds more overhead than necessary for traditional Rails apps.&lt;/p&gt;

&lt;p&gt;But what if you could build a modern, dynamic UI without the extra complexity?&lt;/p&gt;

&lt;h3&gt;Enter Hotwire – A Rails-native alternative&lt;/h3&gt;

&lt;p&gt;Hotwire embraces the power of server-rendered HTML while still delivering a fast, interactive user experience. Instead of shifting everything to the frontend, it keeps Rails at the core and handles interactivity in a way that feels natural to the framework.&lt;/p&gt;

&lt;p&gt;With Hotwire, you don’t need to set up a separate API, manage client-side state, or keep up with endless JavaScript updates. You get the best of both worlds—modern UI interactions without the React overhead.&lt;/p&gt;

&lt;h2&gt;What is Hotwire? A Rails Developer’s Perspective&lt;/h2&gt;

&lt;p&gt;Hotwire is a framework that brings modern UI interactivity to Rails without the complexity of a full JavaScript frontend. It keeps things simple by relying on server-rendered updates instead of pushing everything to the client.&lt;/p&gt;

&lt;p&gt;At its core, Hotwire = Turbo + Stimulus:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Turbo&lt;/strong&gt; – Handles fast page loads, real-time updates, and partial page changes without writing custom JavaScript. This means forms, lists, and UI interactions feel instant without managing the frontend state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stimulus&lt;/strong&gt; – A small JavaScript framework that adds enhancements where needed. Unlike React, it doesn’t take over the UI—it simply connects behavior to existing HTML elements.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Why Hotwire Fits Rails So Well&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://blog.planetargon.com/blog/entries/rails-in-2024-still-relevant-or-living-in-the-past?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Rails has always been about "convention over configuration."&lt;/a&gt; Instead of forcing developers to make endless decisions about frontend architecture, Hotwire follows Rails’ principles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It works out of the box with Rails' existing tools.&lt;/li&gt;
&lt;li&gt;It keeps backend logic in Rails instead of spreading it across multiple layers.&lt;/li&gt;
&lt;li&gt;It reduces unnecessary complexity by avoiding heavy JavaScript frameworks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With Hotwire, you don’t need to rework how your app is built—you just extend Rails' strengths to create a fast, interactive UI with minimal effort.&lt;/p&gt;

&lt;h2&gt;When to Use Hotwire Instead of React&lt;/h2&gt;

&lt;p&gt;There are many cases where React is overkill in a Rails app. If you don’t need a full-blown single-page application (SPA), React might be adding more complexity than value.&lt;/p&gt;

&lt;h3&gt;When React is Overkill&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Your app isn’t an SPA, but it still has some interactive elements.&lt;/li&gt;
&lt;li&gt;You’re using React for only a few small features (modals, forms, or UI updates).&lt;/li&gt;
&lt;li&gt;You’re dealing with long build times, slow initial page loads, or performance issues caused by client-side rendering.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;When Hotwire Shines&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You want to keep your app fully within Rails without adding a separate frontend framework.&lt;/li&gt;
&lt;li&gt;You need real-time updates but don’t want to set up &lt;a href="https://en.wikipedia.org/wiki/WebSocket" rel="noopener noreferrer"&gt;WebSockets&lt;/a&gt; manually.&lt;/li&gt;
&lt;li&gt;You prefer less JavaScript and more of Rails' simplicity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hotwire is a great choice for those who want modern UI features without the complexity of a JavaScript-heavy setup. It lets you build fast, interactive apps while keeping your Rails app clean and maintainable.&lt;/p&gt;

&lt;h2&gt;Hotwire in Action: How We Use it at Planet Argon&lt;/h2&gt;

&lt;p&gt;In our recent project for &lt;a href="https://www.olssonroofing.com/" rel="noopener noreferrer"&gt;Olsson Roofing&lt;/a&gt;, we built a mobile-first web application for field maintenance workers. Instead of using React as we typically would, we embraced Hotwire—Rails' modern approach to building responsive web applications without writing much JavaScript.&lt;/p&gt;

&lt;h3&gt;Turbo Streams for Form Steps&lt;/h3&gt;

&lt;p&gt;One of our main uses of Hotwire was implementing a multi-step form process for roof inspections. We used Turbo Streams to navigate different form sections without full page reloads. When users submit a form step, the controller responds with a Turbo Stream that updates just the form content:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx25n8ae9acr122ao5xsb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx25n8ae9acr122ao5xsb.png" alt="code snippet showing updates to the form content" width="645" height="102"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The form partial is structured to work with these Turbo Stream updates:  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqnqgxv3qr6a6y9dl8pb1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqnqgxv3qr6a6y9dl8pb1.png" alt="code snippet showing Turbo Stream updates" width="748" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This approach allowed us to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep each form step isolated and maintainable&lt;/li&gt;
&lt;li&gt;Provide instant feedback when moving between steps&lt;/li&gt;
&lt;li&gt;Maintain a smooth user experience on mobile devices with slower connections&lt;/li&gt;
&lt;li&gt;Handle form validation errors without losing context&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Stimulus for Enhanced Interactivity&lt;/h3&gt;

&lt;p&gt;While Turbo handled most of our needs, we used Stimulus for client-side interactions that required JavaScript. Looking at our views, we can see how we connected Stimulus controllers:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffslyefgagfv07rnuo490.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffslyefgagfv07rnuo490.png" alt="code snippet to see how we connected Stimulus controllers" width="745" height="194"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This &lt;strong&gt;data-controller="form"&lt;/strong&gt; attribute connects to our form controller that handles image previews:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fit5ggdhketkdpibtpdmh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fit5ggdhketkdpibtpdmh.png" alt="code snippet showing data controller form" width="370" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The controller is automatically loaded thanks to our Stimulus configuration in &lt;strong&gt;app/javascript/controllers/index.js&lt;/strong&gt;:  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft2a3jfwf3dydzbr4dmve.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft2a3jfwf3dydzbr4dmve.png" alt="code snippet showing controllers in javascript" width="737" height="85"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;What We Learned&lt;/h3&gt;   

&lt;h4&gt;The Good&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Productivity Boost:&lt;/strong&gt; Hotwire allowed us to build interactive features with significantly less code than a React-based approach.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance:&lt;/strong&gt; Thanks to Turbo's smart HTML streaming, the app feels snappy even on slower mobile connections.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;The Challenging&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mental Model Shift:&lt;/strong&gt; Coming from React, it took time to shift our thinking from client-side state management to server-side HTML updates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Debugging:&lt;/strong&gt; Initially, debugging Turbo Frame and Stream issues was tricky since they operate differently from traditional AJAX requests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation:&lt;/strong&gt; While Hotwire's documentation is good, finding solutions for edge cases sometimes required diving into source code or community discussions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;What We'd Do Differently&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frame Organization:&lt;/strong&gt; We would better organize our Turbo Frames hierarchy. For example, we could have nested frames for related form sections to better manage state:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgyjdgnffx5x22oiq6yen.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgyjdgnffx5x22oiq6yen.png" alt="code snippet to show frame organization" width="346" height="178"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stimulus Controllers:&lt;/strong&gt; Instead of the somewhat monolithic form controller we ended up with, we would create more focused, reusable stimulus controllers. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Error Handling:&lt;/strong&gt; We'd implement more robust error handling for Turbo requests, possibly with a dedicated error Stimulus controller:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F95nb33hzo4z63rn2mps9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F95nb33hzo4z63rn2mps9.png" alt="code snippet showing error handling" width="455" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;FAQ’s and Resources&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;"Can Hotwire handle complex UIs?"
→ Yes, but it requires rethinking how you structure frontend logic.
&lt;/li&gt;
&lt;li&gt;"What about existing React components?"
→ Hybrid approach: Keep React where needed and transition the rest.
&lt;/li&gt;
&lt;li&gt;"Is it hard to learn?"
→ If you know Rails, you can pick up Hotwire fast—here are some of our favorite resources.

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://hotwired.dev/" rel="noopener noreferrer"&gt;Hotwired.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://pragprog.com/titles/jmnative/hotwire-native-for-rails-developers/" rel="noopener noreferrer"&gt;Hotwire Native for Rails Developers &lt;/a&gt;by Joe Masilotti
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://arkency.com/webinars/from-react-to-hotwire/" rel="noopener noreferrer"&gt;From React to Hotwire – An Unexpected Journey&lt;/a&gt; webinar from Arkency
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://pragmaticstudio.com/courses/hotwire-rails" rel="noopener noreferrer"&gt;Hotwire for Rails Developers&lt;/a&gt; course by Pragmatic Studio
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.37signals.com/announcing-hotwire-spark-live-reloading-for-rails/" rel="noopener noreferrer"&gt;Hotwire Spark: live reloading for Rails applications&lt;/a&gt; by 37 Signals
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;Key Takeaways&lt;/h2&gt;

&lt;p&gt;Our experience with Hotwire has been largely positive. While there was a learning curve, the benefits of simpler code, better performance, and enhanced reliability made it a great choice for this mobile-first application. The framework's approach to progressive enhancement particularly shined in our use case, where network connectivity couldn't be guaranteed.  &lt;/p&gt;

&lt;p&gt;We're excited to continue using Hotwire for future projects, applying the lessons we've learned to build even better applications. The framework's alignment with Rails' "convention over configuration" philosophy means we can focus more on solving business problems and less on technical implementation details.&lt;/p&gt;

&lt;p&gt;Also! Listen to Joel Hawksley discuss how frontend complexity affects maintainability and why simplicity matters on &lt;a href="https://maintainable.fm/episodes/joel-hawksley-the-hidden-costs-of-frontend-complexity" rel="noopener noreferrer"&gt;Maintainable Podcast: The Hidden Costs of Frontend Complexity.&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;We Think You'll Also Enjoy Reading...&lt;/h2&gt;   

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://blog.planetargon.com/blog/entries/ruby-on-rails-vs-react-finding-the-perfect-fit-for-your-web-development-project" rel="noopener noreferrer"&gt;"Ruby on Rails vs. React: Finding the Perfect Fit for Your Web Development Project"&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://blog.planetargon.com/blog/entries/how-to-measure-developer-productivity-in-a-multi-project-environment" rel="noopener noreferrer"&gt;"How to Measure Developer Productivity in a Multi-Project Environment"&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;FAQ's&lt;/h2&gt;   

&lt;h3&gt;Q: "What are the limitations of Hotwire?"&lt;/h3&gt;

&lt;p&gt;A: Hotwire simplifies building interactive Rails applications but may fall short for extremely complex, state-heavy apps typically suited for full JavaScript frameworks like React or Vue. While great for most Rails projects, it may require additional custom JavaScript or third-party integrations to handle sophisticated frontend logic or highly interactive UI components.&lt;/p&gt;

&lt;h3&gt;Q: "Can I use Hotwire with existing Rails applications?"&lt;/h3&gt;

&lt;p&gt;A: Yes! Hotwire is designed to integrate seamlessly into existing Rails apps. You can incrementally adopt it by replacing specific UI components or interactions with Turbo and Stimulus without rewriting your entire frontend.&lt;/p&gt;

&lt;h3&gt;Q: "How does Hotwire handle complex interactions?"&lt;/h3&gt;

&lt;p&gt;A: Hotwire manages complex interactions using Turbo for seamless partial page updates and Stimulus for targeted JavaScript behavior. Together, they allow developers to handle rich, interactive experiences without heavy reliance on complex JavaScript frameworks, keeping your UI maintainable and performant.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This post was originally posted on the &lt;a href="https://blog.planetargon.com/blog" rel="noopener noreferrer"&gt;Planet Argon blog&lt;/a&gt;. &lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>How to Demo Your Application to a New Development Team: A Helpful Guide</title>
      <dc:creator>Autumn</dc:creator>
      <pubDate>Wed, 23 Apr 2025 20:07:46 +0000</pubDate>
      <link>https://dev.to/autumn_tonita/how-to-demo-your-application-to-a-new-development-team-a-helpful-guide-37mo</link>
      <guid>https://dev.to/autumn_tonita/how-to-demo-your-application-to-a-new-development-team-a-helpful-guide-37mo</guid>
      <description>&lt;p&gt;&lt;strong&gt;Part 1 in our series: Onboarding a New Development Team&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you start &lt;a href="https://blog.planetargon.com/blog/entries/client-onboarding-what-to-expect-in-your-first-month-with-planet-argon" rel="noopener noreferrer"&gt;working with a new development team&lt;/a&gt;, one of the first and most valuable things you can do is walk them through your application. It's more than just clicking around—it's about sharing the story of your app: what it does, who it serves, and how it's built.&lt;/p&gt;

&lt;p&gt;We’ve seen a lot of client-led demos, and we’ve learned what makes them effective—and what leaves teams guessing. This post outlines a simple framework for &lt;strong&gt;walking a development team through your application&lt;/strong&gt;. It includes key talking points to help you deliver a clear and helpful overview that saves time and builds shared understanding from the start.&lt;/p&gt;

&lt;p&gt;We’ll cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to introduce your business and users.&lt;/li&gt;
&lt;li&gt;What technical details are most beneficial to share early on.&lt;/li&gt;
&lt;li&gt;What’s changed in your app recently—and what’s coming up.&lt;/li&gt;
&lt;li&gt;How to prepare the team for emergencies and escalations.&lt;/li&gt;
&lt;li&gt;What kind of support you need from the dev team week-to-week.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By the end, you’ll have a helpful checklist for your next application walkthrough.&lt;/p&gt;

&lt;h2&gt;1.  Start with the Big Picture: Your Business and Your Users&lt;/h2&gt;

&lt;p&gt;As the new team onboards to your application, it will be important to highlight the technical aspects of what the application does. However, something people often miss when demonstrating to a new team is explaining the why behind the application. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What business purpose does your app serve?&lt;/li&gt;
&lt;li&gt;Who are your users?&lt;/li&gt;
&lt;li&gt;What problems does it solve for them?&lt;/li&gt;
&lt;li&gt;How do you interact with those users?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Start from the 30,000-foot view:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“Our users are [x] who want a way to [y].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then, take on the personality of a daily user:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“So if I want to get [y] from the app, I would log in and navigate to [critical page #1] or [critical page #2].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Finally, show how your team engages with those users:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“As a customer service representative, we can pick up a user’s case and [do x] or [do y].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This context helps the engineering team understand &lt;em&gt;why&lt;/em&gt; they’re building and supporting the product, making it easier to navigate the app with purpose instead of aimlessly clicking around.&lt;/p&gt;

&lt;h2&gt;2. What Does the Application Do?&lt;/h2&gt;

&lt;p&gt;After covering what the application looks like for users and administrators, it is time to move over to the more technical functions of its structure. A senior engineer, CTO, or technical project manager would best lead this section of the demonstration. &lt;/p&gt;

&lt;p&gt;Here, we should aim to answer questions like: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where is the application hosted? &lt;/li&gt;
&lt;li&gt;Is there up-to-date documentation on how to set up the application? &lt;/li&gt;
&lt;li&gt;Are there important services that the onboarding team needs to be aware of (like Sidekiq Pro or AppSignal)?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here are a few key areas to touch on:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hosting and setup:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“When we have a new engineer starting, the first thing we ensure they have access to is [x].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application history:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“This started as a basic [code framework] app but has since expanded to include [other frameworks/tools].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important services:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“We use Sidekiq Pro for background jobs and AppSignal for monitoring.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Known quirks or exceptions:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“An important thing that may not be super clear in the documentation is [x], which exists for [y purpose].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build process:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“When a change is ready, the testing suite runs and then [x] happens.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;These insights give the onboarding team a strong technical foundation to begin working efficiently.&lt;/p&gt;

&lt;h2&gt;3. Where Does the Application Stand Today?&lt;/h2&gt;

&lt;p&gt;After giving the team an idea of what the business does and how the application is set up, it’s time to get into the current state. This section aims to give the team a healthy understanding of what new features have been implemented recently, any ongoing issues, and cover important things to be aware of for future work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s new:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“In the last three months, we added a new way for users to [x].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s wrong:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“We’ve been having issues with [x] and [y], which we [have/haven’t resolved yet].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s bothering you:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“It hasn’t happened in a while, but every few months, I worry about [x].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s coming:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“In the next two months, the Ops team would like to see [x] happen.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This helps the team prioritize their focus areas and understand where they can add the most value.&lt;/p&gt;

&lt;h2&gt;4. Preparing the team for emergencies&lt;/h2&gt;

&lt;p&gt;Emergencies are never fun, but they happen. Use this part of the demo to walk the team through what to do when something goes wrong.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What do you do when things go poorly? &lt;/li&gt;
&lt;li&gt;Where do you look if there is an outage? &lt;/li&gt;
&lt;li&gt;How have outages historically escalated to the engineers? &lt;/li&gt;
&lt;li&gt;Have there been recurring themes in the recent outages?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How escalations happen:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“Historically, [x person/people] are the first to tell us when something is wrong.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where to look:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“When we get a report, we start by checking [x]. That usually tells us [y].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recovery process:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“If we need to rollback to a previous version of the app or database, here’s how we typically do that.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Sharing your existing process gives your new team a sense of confidence and preparedness for when things break.&lt;/p&gt;

&lt;h2&gt;5. Helping Teams Help You&lt;/h2&gt;

&lt;p&gt;Finally, wrap up your demo by discussing what a successful working relationship looks like. Be clear about how you like to work, how you prefer to get updates, and what you expect from your dev partners.&lt;/p&gt;

&lt;p&gt;For more on how to build collaborative and inclusive developer relationships from day one, check out this episode of &lt;a href="https://maintainable.fm/episodes/april-wensel-navigating-legacy-code-with-compassion?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Maintainable Software Podcast with April Wensel&lt;/a&gt;, where she shares thoughtful insights on navigating legacy code with empathy and intention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cadence:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“Every Tuesday morning, our operations team meets to review priorities and plan the next few weeks. I need updates on [x] and any [y] incidents before that meeting.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Preferred processes:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“It’s easiest for me if updates are made in [x-way].”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Escalation protocols:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;em&gt;“If there’s a new incident or outage, I’m responsible for notifying [x-people]. For that, I need to know [y] and [z].”&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;Making it happen 🚀&lt;/h2&gt;

&lt;p&gt;Demos don’t have to be polished or perfect, but they do need to be intentional. A clear, thoughtful walkthrough of your application helps your new engineering team get up to speed faster, make fewer assumptions, and deliver better work sooner.&lt;/p&gt;

&lt;p&gt;The more context you give, the more your development partners can support your business goals effectively.&lt;/p&gt;




&lt;h2&gt;We Think You’ll Also Enjoy Reading…&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.planetargon.com/blog/entries/develop-your-project-requirements-with-four-ws" rel="noopener noreferrer"&gt;Develop Your Project Requirements with Four W’s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.planetargon.com/blog/entries/5-questions-to-ask-your-ruby-on-rails-support-team" rel="noopener noreferrer"&gt;5 Questions to Ask Your Ruby on Rails Support Team&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.planetargon.com/blog/entries/what-value-is-a-ruby-on-rails-code-audit" rel="noopener noreferrer"&gt;What Value Is A Ruby on Rails Code Audit?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;FAQ’s&lt;/h2&gt;

&lt;h3&gt;Q: Before demoing my application to a new development team, what should I prepare?&lt;/h3&gt;

&lt;p&gt;A: Before your demo, jot down a few notes about your app’s core users, business goals, recent features or bugs, and any known technical quirks. Sharing key links (like documentation or staging credentials) in advance is also helpful.&lt;/p&gt;

&lt;h3&gt;Q: Who should lead the application demo on our side?&lt;/h3&gt;

&lt;p&gt;A: Ideally, the demo should be a team effort: a product owner or project manager can provide business context while a senior engineer or technical lead can walk through the architecture and infrastructure details.&lt;/p&gt;

&lt;h3&gt;Q: What if I don’t have documentation for some parts of the app?&lt;/h3&gt;

&lt;p&gt;A: That’s totally okay—your demo helps fill in those gaps. The development team can also assist you in documenting things as they go. Check out our post on &lt;a href="https://blog.planetargon.com/blog/entries/ruby-on-rails-code-audits-8-steps-to-review-your-app" rel="noopener noreferrer"&gt;Ruby on Rails Code Audits: 8 Steps to Review Your App&lt;/a&gt; to learn how we uncover undocumented parts of apps.&lt;/p&gt;

&lt;h3&gt;Q: How long should the demo be?&lt;/h3&gt;

&lt;p&gt;A: Plan for around 30–60 minutes, depending on the complexity of your app. It’s okay if not everything is covered in one sitting—this initial demo is just the start of the onboarding process.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
