<?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: RockAndNull</title>
    <description>The latest articles on DEV Community by RockAndNull (@rockandnull).</description>
    <link>https://dev.to/rockandnull</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F550287%2F12c9b389-1d76-4a8f-a97a-772343a78588.jpg</url>
      <title>DEV Community: RockAndNull</title>
      <link>https://dev.to/rockandnull</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rockandnull"/>
    <language>en</language>
    <item>
      <title>LLMs changed writing. But our submission processes haven’t caught up.</title>
      <dc:creator>RockAndNull</dc:creator>
      <pubDate>Thu, 28 May 2026 12:55:38 +0000</pubDate>
      <link>https://dev.to/rockandnull/llms-changed-writing-but-our-submission-processes-havent-caught-up-1nje</link>
      <guid>https://dev.to/rockandnull/llms-changed-writing-but-our-submission-processes-havent-caught-up-1nje</guid>
      <description>&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%2Fimages.unsplash.com%2Fphoto-1544396821-4dd40b938ad3%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDN8fGJ1cmVhdWNyYWN5fGVufDB8fHx8MTc3OTk3Mjg1Mnww%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" 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%2Fimages.unsplash.com%2Fphoto-1544396821-4dd40b938ad3%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDN8fGJ1cmVhdWNyYWN5fGVufDB8fHx8MTc3OTk3Mjg1Mnww%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" alt="LLMs changed writing. But our submission processes haven’t caught up." width="2000" height="1330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We are entering a strange communication loop. One person uses an LLM to generate a long proposal, report, or application document, and the receiver then uses another LLM to summarize it into bullet points.&lt;/p&gt;

&lt;p&gt;We are effectively using AI to expand text, only to use AI again to compress it.&lt;/p&gt;

&lt;p&gt;A lot of submission processes, grant applications, RFPs, and evaluation forms were designed for a pre-LLM era, when producing long, polished documents required significant human effort. &lt;strong&gt;Length itself was often interpreted as effort, seriousness, or competence.&lt;/strong&gt; Today, everyone has access to tools that can generate pages of convincing text in seconds, and this changes the value of written communication.&lt;/p&gt;

&lt;p&gt;If the real goal is to communicate ideas, requirements, risks, timelines, or proposals, then we should &lt;strong&gt;optimize for clarity and essence&lt;/strong&gt; instead of document length. Personally, when I receive long documents nowadays, I often feel they were not truly written for humans to read. In a fast-moving world, concise communication matters more than ever. Bullet points, summaries, key decisions, tradeoffs, and actionable information are usually enough.&lt;/p&gt;

&lt;p&gt;Otherwise, the workflow becomes absurd: use an LLM to generate 20 pages, use another LLM to summarize the 20 pages, then read the summary.&lt;/p&gt;

&lt;p&gt;We should adapt our systems and expectations to the reality of the tools we now have. Instead of requiring maximum text, we should require maximum clarity.&lt;/p&gt;

</description>
      <category>thoughts</category>
      <category>artificialintelligen</category>
    </item>
    <item>
      <title>Promies Code Distribution: A hassle-free way to manage app giveaways</title>
      <dc:creator>RockAndNull</dc:creator>
      <pubDate>Thu, 21 May 2026 12:24:10 +0000</pubDate>
      <link>https://dev.to/rockandnull/promies-code-distribution-a-hassle-free-way-to-manage-app-giveaways-2jlo</link>
      <guid>https://dev.to/rockandnull/promies-code-distribution-a-hassle-free-way-to-manage-app-giveaways-2jlo</guid>
      <description>&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%2Fimages.unsplash.com%2Fphoto-1647221598091-880219fa2c8f%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDJ8fGdpdmVhd2F5fGVufDB8fHx8MTc3OTM2MTc1Mnww%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" 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%2Fimages.unsplash.com%2Fphoto-1647221598091-880219fa2c8f%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDJ8fGdpdmVhd2F5fGVufDB8fHx8MTc3OTM2MTc1Mnww%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" alt="Promies Code Distribution: A hassle-free way to manage app giveaways" width="2000" height="1125"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We originally built &lt;a href="https://www.promies.net/?ref=paleblueapps.com" rel="noopener noreferrer"&gt;Promies&lt;/a&gt; to solve a very specific problem of our own: distributing and managing promo codes for our Android apps. Once we saw how much easier it made our lives, we decided to share it with the rest of the developer community.&lt;/p&gt;

&lt;p&gt;A few months ago, we completely re-wrote Promies from scratch. Along with that total codebase overhaul, we gave our promo code distribution system a massive, much-needed revamp.&lt;/p&gt;

&lt;p&gt;If you’ve ever run an app giveaway, you know how chaotic it can get. Here is a look at how the new system takes the headache out of managing your promo codes.&lt;/p&gt;

&lt;h3&gt;
  
  
  From spreadsheet chaos to "batches"
&lt;/h3&gt;

&lt;p&gt;When you export promo codes from the Google Play Console, you are handed a raw Excel sheet. From that point on, you are completely on your own. You are responsible for managing them, manually keeping track of which codes have been handed out, which ones are actually used, and which ones are still sitting idle in your spreadsheet.&lt;/p&gt;

&lt;p&gt;With Promies, you can take those exported codes and insert them into what we call a &lt;strong&gt;"batch"&lt;/strong&gt; in the code repository. Think of a batch as a clean, digital container for a specific set of codes you've generated.&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%2F4nkakz677iar7fq2jolq.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%2F4nkakz677iar7fq2jolq.png" alt="Promies Code Distribution: A hassle-free way to manage app giveaways" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating and sharing Promotions
&lt;/h3&gt;

&lt;p&gt;Once your batches are set up, you can create a &lt;strong&gt;"promotion."&lt;/strong&gt; A promotion can pull promo codes from one batch or even combine codes from multiple batches.&lt;/p&gt;

&lt;p&gt;After configuring your promotion, you are provided with a clean, dedicated promotion URL. Instead of pasting a giant wall of text codes into a forum, where bots scrape them instantly, or users get frustrated trying already-redeemed codes, you just share this single URL.&lt;/p&gt;

&lt;p&gt;This makes distribution incredibly easy, making it ideal for posting on Reddit, Twitter, and other online communities. Promies handles the logistics in the background, handing out codes one by one and automatically keeping track of which ones are used.&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%2F5tej69p01siwowchoben.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%2F5tej69p01siwowchoben.png" alt="Promies Code Distribution: A hassle-free way to manage app giveaways" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Tailor the giveaway experience
&lt;/h3&gt;

&lt;p&gt;Every app campaign has different goals, so we built plenty of ways to customize your promotion pages.&lt;/p&gt;

&lt;p&gt;For instance, you can choose to require an email address before providing a user with a promo code. This acts as an excellent speedbump against bots and serial hoarders, ensuring your codes go to actual users, since email verification is required.&lt;/p&gt;

&lt;p&gt;To highlight the true value of what you're giving away, you can display before-and-after pricing so users have context on the value they are receiving. We've also packed in several other customization options to drive engagement, such as displaying the code's expiration date or setting up limited availability thresholds to create a sense of urgency.&lt;/p&gt;

&lt;p&gt;Finally, sometimes a user grabs a code only to realize they can't use it or have already unlocked the feature. We've added a button that allows users to seamlessly return a code, instantly throwing it back into the pool for someone else to enjoy.&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%2F4s4l1iuf485sdfll7w0c.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%2F4s4l1iuf485sdfll7w0c.png" alt="Promies Code Distribution: A hassle-free way to manage app giveaways" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Getting free exposure for your apps
&lt;/h3&gt;

&lt;p&gt;On top of making the logistics effortless, we also want to help you actually get eyes on your work.&lt;/p&gt;

&lt;p&gt;On our &lt;a href="https://www.promies.net/promotions?ref=paleblueapps.com" rel="noopener noreferrer"&gt;homepage&lt;/a&gt;, we prominently showcase recent public promotions, allowing you to gather new users organically right from the platform. Additionally, we are now sending out a &lt;a href="https://www.promies.net/?ref=paleblueapps.com" rel="noopener noreferrer"&gt;monthly newsletter&lt;/a&gt; featuring the best recent promotions directly to our subscribers, driving even more exposure to your apps.&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%2Fmfo1zlponov8lobhwysf.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%2Fmfo1zlponov8lobhwysf.png" alt="Promies Code Distribution: A hassle-free way to manage app giveaways" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Give it a spin for your next giveaway and let us know your thoughts!&lt;/p&gt;

&lt;p&gt;If you do not already have one, you can &lt;a href="https://www.promies.net/developer?ref=paleblueapps.com" rel="noopener noreferrer"&gt;sign up for a Promies developer account&lt;/a&gt; and get started quickly.&lt;/p&gt;

</description>
      <category>android</category>
      <category>ios</category>
    </item>
    <item>
      <title>Pale Blue Spring Admin: Now you can actually edit stuff (and custom UI snippets)</title>
      <dc:creator>RockAndNull</dc:creator>
      <pubDate>Thu, 14 May 2026 11:57:06 +0000</pubDate>
      <link>https://dev.to/rockandnull/pale-blue-spring-admin-now-you-can-actually-edit-stuff-and-custom-ui-snippets-om4</link>
      <guid>https://dev.to/rockandnull/pale-blue-spring-admin-now-you-can-actually-edit-stuff-and-custom-ui-snippets-om4</guid>
      <description>&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%2Fimages.unsplash.com%2Fphoto-1586776977607-310e9c725c37%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDF8fGZpeHxlbnwwfHx8fDE3Nzg3NTc5ODN8MA%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" 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%2Fimages.unsplash.com%2Fphoto-1586776977607-310e9c725c37%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDF8fGZpeHxlbnwwfHx8fDE3Nzg3NTc5ODN8MA%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" alt="Pale Blue Spring Admin: Now you can actually edit stuff (and custom UI snippets)" width="2000" height="1333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When we first &lt;a href="https://dev.to/rockandnull/introducing-pale-blue-spring-admin-auto-generated-admin-ui-for-spring-boot-1ccf"&gt;introduced Pale Blue Spring Admin&lt;/a&gt;, it was a bit of a tease. You could look, but you couldn't touch. It provided a read-only window into your JPA entities, useful for a quick health check, but not exactly a replacement for the "Swiss Army Knife" experience of Django Admin.&lt;/p&gt;

&lt;p&gt;Our goal has always been simple: we love Kotlin and the Spring Boot ecosystem, but we missed the "it just works" productivity of Python/Django.&lt;/p&gt;

&lt;p&gt;With the latest release, we are happy to say we believe we have come closer to bridging that gap.&lt;/p&gt;

&lt;h2&gt;
  
  
  The missing CRUD
&lt;/h2&gt;

&lt;p&gt;The headline feature is simple: &lt;strong&gt;Editing is here.&lt;/strong&gt; You can now create, update, and delete entities directly from the UI. No more jumping into a database console or writing throwaway REST endpoints just to fix a typo in a production row. The UI automatically generates the appropriate forms based on your JPA annotations, keeping the "zero-config" promise alive.&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%2Ffnp6hfn79zo1kl2xbjjm.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%2Ffnp6hfn79zo1kl2xbjjm.png" alt="Pale Blue Spring Admin: Now you can actually edit stuff (and custom UI snippets)" width="800" height="600"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Add, edit, update, delete now supported&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond the grid: Custom UI snippets
&lt;/h2&gt;

&lt;p&gt;One of the main reasons people eventually outgrow auto-generated admins is the "walled garden" effect. You need a custom button to trigger a background job, or a specific chart to visualize data, and suddenly, the library is more of a hurdle than a help.&lt;/p&gt;

&lt;p&gt;To solve this, we’ve added &lt;strong&gt;Custom UI Snippets&lt;/strong&gt;. You can now define your own UI elements to extend the portal. Whether it's a specialized dashboard widget or a custom action button, you can inject your own logic and components without fighting the library.&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%2F23kmofxbjaqfssn0ipts.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%2F23kmofxbjaqfssn0ipts.png" alt="Pale Blue Spring Admin: Now you can actually edit stuff (and custom UI snippets)" width="800" height="600"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Custom UI snippet at the bottom of the admin portal&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Closing the gap
&lt;/h3&gt;

&lt;p&gt;With these additions, we believe we are very close to feature parity with the core functionality of Django Admin.&lt;/p&gt;

&lt;p&gt;We want to write backend code in our favorite language, Kotlin, with the same velocity as the Python ecosystem. We’re building this for ourselves, but we hope it makes your life easier too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Give it a spin:&lt;/strong&gt; &lt;a href="https://github.com/PaleBlueApps/pale-blue-spring-admin?ref=paleblueapps.com" rel="noopener noreferrer"&gt;Pale Blue Spring Admin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Try it out, and let us know what you think.&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

</description>
      <category>springboot</category>
      <category>kotlin</category>
      <category>backend</category>
      <category>infra</category>
    </item>
    <item>
      <title>Promies Feedback Board: A simple way to collect user feedback in your apps</title>
      <dc:creator>RockAndNull</dc:creator>
      <pubDate>Tue, 05 May 2026 10:46:53 +0000</pubDate>
      <link>https://dev.to/rockandnull/promies-feedback-board-a-simple-way-to-collect-user-feedback-in-your-apps-47k</link>
      <guid>https://dev.to/rockandnull/promies-feedback-board-a-simple-way-to-collect-user-feedback-in-your-apps-47k</guid>
      <description>&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%2Fimages.unsplash.com%2Fphoto-1509909756405-be0199881695%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDZ8fGZlZWRiYWNrfGVufDB8fHx8MTc3Nzk3ODAyOXww%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" 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%2Fimages.unsplash.com%2Fphoto-1509909756405-be0199881695%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDZ8fGZlZWRiYWNrfGVufDB8fHx8MTc3Nzk3ODAyOXww%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" alt="Promies Feedback Board: A simple way to collect user feedback in your apps" width="2000" height="1333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’ve shipped even one mobile app, you’ve probably run into the same problem. Feedback is everywhere. Emails get lost, store reviews lack context, and feature requests end up scattered across different places.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing Promies Feedback Board
&lt;/h2&gt;

&lt;p&gt;A simple way to collect and manage feedback in one place, quickly and efficiently. By adding a link inside your app, you create a central hub where users can share ideas, report issues, and vote on what matters most.&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%2Fucf556a4i27wcwdxnqv5.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%2Fucf556a4i27wcwdxnqv5.png" alt="Promies Feedback Board: A simple way to collect user feedback in your apps" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is designed to be practical and easy to integrate into your existing workflow. You can customize the board to match &lt;strong&gt;your app’s primary color&lt;/strong&gt; so it feels like a natural extension of your product. You also have the option to show your email, giving users a direct way to reach out when needed.&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%2Frt06vg9gy4kfv332lt9a.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%2Frt06vg9gy4kfv332lt9a.png" alt="Promies Feedback Board: A simple way to collect user feedback in your apps" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Users &lt;strong&gt;can vote on ideas&lt;/strong&gt; , helping you identify what is actually important. Voting is protected with a CAPTCHA to avoid spam and abuse. They &lt;strong&gt;can also subscribe to updates&lt;/strong&gt; , and users will get notified via email when the status changes, for example, when something moves to in progress or is marked as done.&lt;/p&gt;

&lt;h2&gt;
  
  
  Full control for developers
&lt;/h2&gt;

&lt;p&gt;From the developer side, you have full control over the feedback flow. You &lt;strong&gt;can reply to ideas&lt;/strong&gt; and make those responses publicly visible, creating transparency and showing users that their feedback is being acknowledged and acted on.&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%2F0wh1lidcdoel66cr2xa1.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%2F0wh1lidcdoel66cr2xa1.png" alt="Promies Feedback Board: A simple way to collect user feedback in your apps" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also &lt;strong&gt;update the status of each idea&lt;/strong&gt; , delete entries when needed, and view basic stats to understand what is gaining traction. In addition, you can choose to &lt;strong&gt;receive email notifications for new ideas&lt;/strong&gt; so you never miss incoming feedback.&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%2Fccmxbtigeq7s3e0whooj.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%2Fccmxbtigeq7s3e0whooj.png" alt="Promies Feedback Board: A simple way to collect user feedback in your apps" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How we use it
&lt;/h2&gt;

&lt;p&gt;At &lt;a href="https://paleblueapps.com/?ref=paleblueapps.com" rel="noopener noreferrer"&gt;Pale Blue&lt;/a&gt;, we already use Feedback Board across our own apps. It has become our primary tool for deciding what to build next in our apps. Instead of relying on assumptions, we look at what users are voting on and subscribing to.&lt;/p&gt;

&lt;p&gt;This, of course, is not enough, but it gives us a much clearer and more reliable signal on what to build next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get started
&lt;/h2&gt;

&lt;p&gt;If you are building mobile apps and want a cleaner way to gather feedback, you are welcome to use it for your own apps as well. If you do not already have one, you can &lt;a href="https://www.promies.net/developer?ref=paleblueapps.com" rel="noopener noreferrer"&gt;sign up for a Promies developer account&lt;/a&gt; and get started quickly.&lt;/p&gt;

</description>
      <category>android</category>
      <category>ios</category>
    </item>
    <item>
      <title>The rise of abandonware</title>
      <dc:creator>RockAndNull</dc:creator>
      <pubDate>Tue, 21 Apr 2026 14:10:12 +0000</pubDate>
      <link>https://dev.to/rockandnull/the-rise-of-abandonware-4fmn</link>
      <guid>https://dev.to/rockandnull/the-rise-of-abandonware-4fmn</guid>
      <description>&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%2Fimages.unsplash.com%2Fphoto-1555493160-1ba56d63b72d%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDN8fGFiYWRvbmVkfGVufDB8fHx8MTc3Njc4MDQwN3ww%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" 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%2Fimages.unsplash.com%2Fphoto-1555493160-1ba56d63b72d%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDN8fGFiYWRvbmVkfGVufDB8fHx8MTc3Njc4MDQwN3ww%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" alt="The rise of abandonware" width="2000" height="1333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The barrier to shipping software has collapsed. With AI code generation, any fleeting idea can become a reality almost instantly.&lt;/p&gt;

&lt;p&gt;But there’s a catch: software that is created fast is often abandoned fast.&lt;/p&gt;

&lt;p&gt;We are seeing a surge of "disposable software." We’re guilty of it too. While the cycle of "shiny object syndrome" has always existed in tech, AI has put it on steroids. We can now create entire repositories in an afternoon, only to realize a week later we have no desire to maintain them.&lt;/p&gt;

&lt;p&gt;This creates a new landscape of risk. When you choose a library for your stack or a new tool for your workflow, you aren't just betting on the code, you’re betting on the people.&lt;/p&gt;

&lt;p&gt;Code is now cheap and ephemeral. The only true constant is the team behind it. Before you depend on a new project, don't just look at the features; look at the track record of the maintainers.&lt;/p&gt;

&lt;p&gt;In the age of AI, the code comes and goes. Make sure the humans are staying.&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>thoughts</category>
      <category>artificialintelligen</category>
    </item>
    <item>
      <title>The danger of the "ok" project</title>
      <dc:creator>RockAndNull</dc:creator>
      <pubDate>Tue, 31 Mar 2026 12:48:11 +0000</pubDate>
      <link>https://dev.to/rockandnull/the-danger-of-the-ok-project-4ae1</link>
      <guid>https://dev.to/rockandnull/the-danger-of-the-ok-project-4ae1</guid>
      <description>&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%2Fimages.unsplash.com%2Fphoto-1527900887130-4c59133ff4a7%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDF8fG1pZGRsZXxlbnwwfHx8fDE3NzQ5NjExNzd8MA%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" 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%2Fimages.unsplash.com%2Fphoto-1527900887130-4c59133ff4a7%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDF8fG1pZGRsZXxlbnwwfHx8fDE3NzQ5NjExNzd8MA%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" alt="The danger of the " width="2000" height="1333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The hardest part of building a project isn’t always dealing with failure.&lt;/p&gt;

&lt;p&gt;It’s dealing with a project that is doing just well enough to keep going. There is a common situation in software where a project isn’t a total disaster, but it isn’t a hit either.&lt;/p&gt;

&lt;p&gt;It has some users and some traction, but not enough to be a clear success. This is the "middle ground," and as Dropbox founder Drew Houston once noted, it can be the most difficult place to be. If a project fails, the choice to stop is easy. If it’s a success, the choice to grow is easy. But when it’s just "okay," it stays alive and uses up energy without a certain future.&lt;/p&gt;

&lt;p&gt;In the AI era, the timing of this decision feels different because the industry moves so fast. A few years ago, it was common to let a project sit for a long time to see if it would eventually grow. Today, a project that is only "okay" now might be outdated in a very short time because tools and markets change every month. The "wait and see" approach carries a new kind of risk. The speed of the field makes the gap between a slow-growing project and a fast-moving market much more obvious.&lt;/p&gt;

&lt;p&gt;Deciding what to do next usually involves a mix of data and intuition.&lt;/p&gt;

&lt;p&gt;Some look at retention data to see if users are actually staying. It is a choice between waiting for more growth or deciding that the current traction isn't enough to justify more time. In a world that moves this fast, the middle point remains a challenging spot to navigate, with no clear data-driven/rational solution.&lt;/p&gt;

</description>
      <category>thoughts</category>
      <category>business</category>
    </item>
    <item>
      <title>Who is going to train the juniors?</title>
      <dc:creator>RockAndNull</dc:creator>
      <pubDate>Thu, 05 Feb 2026 09:59:43 +0000</pubDate>
      <link>https://dev.to/rockandnull/who-is-going-to-train-the-juniors-3ha</link>
      <guid>https://dev.to/rockandnull/who-is-going-to-train-the-juniors-3ha</guid>
      <description>&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%2Fimages.unsplash.com%2Fphoto-1454165804606-c3d57bc86b40%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDR8fHRlYWNoaW5nfGVufDB8fHx8MTc3MDI4NTUxN3ww%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" 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%2Fimages.unsplash.com%2Fphoto-1454165804606-c3d57bc86b40%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDR8fHRlYWNoaW5nfGVufDB8fHx8MTc3MDI4NTUxN3ww%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" alt="Who is going to train the juniors?" width="2000" height="1335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not long ago, junior engineers learned by working closely with more senior ones.&lt;/p&gt;

&lt;p&gt;Code reviews, design discussions, and mistakes created friction, and that friction built understanding.&lt;/p&gt;

&lt;p&gt;AI changed that.&lt;/p&gt;

&lt;p&gt;Today, answers are instant. Code is generated. Progress looks fast, but depth is optional. A junior can ship without ever fully understanding why something works. That’s powerful, and risky.&lt;/p&gt;

&lt;p&gt;During our last internship season, our intern chose not to use AI tools while coding. Short-term productivity suffered. Tasks took longer.&lt;/p&gt;

&lt;p&gt;But something more important happened: they struggled, debugged, and built intuition. When they would introduce AI tools, the effect would be dramatic. With experience in place, AI will become a multiplier instead of a shortcut. That’s the real distinction.&lt;/p&gt;

&lt;p&gt;AI is great at accelerating experienced engineers. It’s bad at replacing the process that creates them. If we remove friction too early, we don’t get better engineers, just faster output with hidden gaps. And those gaps surface later, when systems scale or fail.&lt;/p&gt;

&lt;p&gt;This isn’t about banning AI. It’s about being intentional. Let juniors struggle a bit. Accept short-term productivity loss.&lt;/p&gt;

&lt;p&gt;Otherwise, we’re not training the next generation of engineers; we’re just shipping code faster.&lt;/p&gt;

</description>
      <category>artificialintelligen</category>
      <category>thoughts</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>How We Fixed SQLite Database Locks in Spring Boot (And Got a 5x Performance Boost)</title>
      <dc:creator>RockAndNull</dc:creator>
      <pubDate>Fri, 30 Jan 2026 10:36:55 +0000</pubDate>
      <link>https://dev.to/rockandnull/how-we-fixed-sqlite-database-locks-in-spring-boot-and-got-a-5x-performance-boost-5nk</link>
      <guid>https://dev.to/rockandnull/how-we-fixed-sqlite-database-locks-in-spring-boot-and-got-a-5x-performance-boost-5nk</guid>
      <description>&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%2Fimages.unsplash.com%2Fphoto-1614064641938-3bbee52942c7%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDN8fExvY2t8ZW58MHx8fHwxNzY5NzY2Mjg3fDA%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" 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%2Fimages.unsplash.com%2Fphoto-1614064641938-3bbee52942c7%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDN8fExvY2t8ZW58MHx8fHwxNzY5NzY2Mjg3fDA%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" alt="How We Fixed SQLite Database Locks in Spring Boot (And Got a 5x Performance Boost)" width="2000" height="1334"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We recently ran into a frustrating production issue: our Spring Boot application using SQLite would occasionally lock up, and the only way to recover was to restart the entire service. After some investigation and configuration changes, we not only fixed the locking issue but also saw dramatic performance improvements. Here's what we learned.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Our production SQLite database would intermittently enter a locked state, causing requests to hang and eventually fail. The database would remain locked until we performed a manual restart; not exactly the kind of reliability we wanted in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Root Cause
&lt;/h2&gt;

&lt;p&gt;SQLite is designed differently from traditional client-server databases like PostgreSQL or MySQL. It's a file-based database that works best with &lt;strong&gt;single-connection access&lt;/strong&gt;. However, Spring Boot's default connection pooling configuration doesn't account for SQLite's unique requirements, leading to connection conflicts and database locks.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;We made several targeted configuration changes to our &lt;code&gt;application.properties&lt;/code&gt; to optimize Spring Boot for SQLite:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Single Connection Pool
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;spring.datasource.hikari.maximum-pool-size=1
spring.datasource.hikari.minimum-idle=0

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

&lt;/div&gt;



&lt;p&gt;SQLite performs best with a single connection. Multiple connections can lead to locking issues, so we configured &lt;a href="https://github.com/brettwooldridge/HikariCP?ref=paleblueapps.com" rel="noopener noreferrer"&gt;HikariCP&lt;/a&gt; to maintain just one connection at a time.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Aggressive Connection Management
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;spring.datasource.hikari.connection-timeout=10000
spring.datasource.hikari.idle-timeout=10000
spring.datasource.hikari.max-lifetime=30000

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

&lt;/div&gt;



&lt;p&gt;These settings ensure connections don't linger unnecessarily, reducing the chance of locks.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Leak Detection
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;spring.datasource.hikari.leak-detection-threshold=5000

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

&lt;/div&gt;



&lt;p&gt;This helps us spot any connections that are held longer than expected, making debugging much easier.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Disable Open-in-View
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;spring.jpa.open-in-view=false

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

&lt;/div&gt;



&lt;p&gt;This was crucial. By default, Spring Boot keeps JPA connections open for the entire HTTP request lifecycle. We disabled this to ensure connections are released as soon as the database operation completes.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Manual Transaction Control
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;spring.datasource.hikari.auto-commit=false

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

&lt;/div&gt;



&lt;p&gt;Disabling auto-commit gives us explicit control over transactions, preventing unexpected commits that could cause locking issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Results
&lt;/h2&gt;

&lt;p&gt;The improvements were dramatic. We load-tested our API using k6 with identical test parameters:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before the changes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Total requests in 5 minutes: 1,736&lt;/li&gt;
&lt;li&gt;Success rate: 76%&lt;/li&gt;
&lt;li&gt;Failed requests: 411&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%2F3bnjp4iuv5nz9vuxsx4d.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%2F3bnjp4iuv5nz9vuxsx4d.png" alt="How We Fixed SQLite Database Locks in Spring Boot (And Got a 5x Performance Boost)" width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After the changes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Total requests in 5 minutes: 11,381&lt;/li&gt;
&lt;li&gt;Success rate: 99%&lt;/li&gt;
&lt;li&gt;Failed requests: 1&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%2Fpcaqo7hwrnsmhia5mwr4.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%2Fpcaqo7hwrnsmhia5mwr4.png" alt="How We Fixed SQLite Database Locks in Spring Boot (And Got a 5x Performance Boost)" width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's a &lt;strong&gt;6.5x increase in throughput&lt;/strong&gt; and virtually eliminated failures. More importantly, we haven't seen a single database lock since deploying these changes.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;SQLite isn't PostgreSQL&lt;/strong&gt; - Default Spring Boot configurations are optimized for client-server databases, not file-based ones.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Single connection is key&lt;/strong&gt; - SQLite's architecture works best with one connection at a time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disable open-in-view&lt;/strong&gt; - This JPA pattern is convenient but problematic with SQLite.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor your connections&lt;/strong&gt; - Leak detection helped us identify issues during development.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you're using SQLite with Spring Boot, these configurations can save you from production headaches and give you some nice performance wins along the way.&lt;/p&gt;

</description>
      <category>springboot</category>
      <category>sqlite</category>
    </item>
    <item>
      <title>Cog in a great machine VS building one from scratch</title>
      <dc:creator>RockAndNull</dc:creator>
      <pubDate>Thu, 22 Jan 2026 15:41:08 +0000</pubDate>
      <link>https://dev.to/rockandnull/cog-in-a-great-machine-vs-building-one-from-scratch-4oi5</link>
      <guid>https://dev.to/rockandnull/cog-in-a-great-machine-vs-building-one-from-scratch-4oi5</guid>
      <description>&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%2Fimages.unsplash.com%2Fphoto-1583198432859-635beb4e8600%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDN8fGNvZ3xlbnwwfHx8fDE3NjkwOTY0MTF8MA%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" 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%2Fimages.unsplash.com%2Fphoto-1583198432859-635beb4e8600%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDN8fGNvZ3xlbnwwfHx8fDE3NjkwOTY0MTF8MA%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" alt="Cog in a great machine VS building one from scratch" width="2000" height="1335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Having spent time as a software engineer in a large tech company and later launching my own company, I’m often asked which experience is “better.”&lt;br&gt;&lt;br&gt;
The honest answer is: they’re both exciting, deeply fulfilling in different ways, and not really comparable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Being a software engineer in a big company
&lt;/h2&gt;

&lt;p&gt;Working in a big company feels like being a cog in an incredible, well-oiled machine. And I don’t mean “cog” in a negative way.&lt;/p&gt;

&lt;p&gt;The machine is complex, powerful, and built by thousands of highly skilled people. Your role is clearly defined. You are expected to go deep, specialize, and deliver excellence within your scope. When something breaks, there’s a process:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You identify the issue&lt;/li&gt;
&lt;li&gt;You report it&lt;/li&gt;
&lt;li&gt;It moves through product managers, designers, tech leads, and prioritization cycles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your responsibility often ends at &lt;em&gt;reporting clearly and correctly&lt;/em&gt;. Someone else owns the decision, someone else owns the fix, and that’s by design. This separation of concerns is what allows large organizations to scale.&lt;/p&gt;

&lt;p&gt;Something is reassuring about this. You can focus on engineering problems, grow technically, and learn from incredibly talented peers. The impact is massive, even if it’s sometimes indirect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Launching your own company
&lt;/h2&gt;

&lt;p&gt;Starting your own company feels very different.&lt;/p&gt;

&lt;p&gt;Instead of being a cog in a large machine, you’re building a much smaller machine from scratch. And at the beginning, you &lt;em&gt;are&lt;/em&gt; most of the parts.&lt;/p&gt;

&lt;p&gt;The boundaries between roles are blurry or nonexistent. You might notice a product issue, report it to yourself, prioritize it, design the solution, implement it, deploy it, and then answer the support ticket that comes in afterward.&lt;/p&gt;

&lt;p&gt;There’s no “this isn’t my job.”&lt;/p&gt;

&lt;p&gt;Even if your official role is “software engineer” or “founder,” reality doesn’t care. If something needs fixing and you’re the best person to do it, then that’s what you’ll do.&lt;/p&gt;

&lt;p&gt;This can be exhausting, but it’s also incredibly energizing. You see the full lifecycle of decisions. You feel the consequences immediately. The feedback loop is short and very real.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two exciting, very different journeys
&lt;/h2&gt;

&lt;p&gt;What I’ve learned is that these two worlds shouldn’t be compared as better or worse.&lt;/p&gt;

&lt;p&gt;They’re simply different journeys:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Big companies teach you scale, rigor, and depth&lt;/li&gt;
&lt;li&gt;Startups teach you ownership, adaptability, and breadth&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One is about mastering your part of the system.&lt;br&gt;&lt;br&gt;
The other is about making sure the system works at all.&lt;/p&gt;

&lt;p&gt;Both are exciting. Both are challenging. And both shape you in ways that stay with you.&lt;/p&gt;

&lt;p&gt;The important thing isn’t choosing the “right” path, but understanding what kind of journey you’re on, and why you chose it.&lt;/p&gt;

</description>
      <category>thoughts</category>
    </item>
    <item>
      <title>Introducing Pale Blue Spring Admin: auto-generated admin UI for Spring Boot</title>
      <dc:creator>RockAndNull</dc:creator>
      <pubDate>Fri, 14 Nov 2025 09:54:40 +0000</pubDate>
      <link>https://dev.to/rockandnull/introducing-pale-blue-spring-admin-auto-generated-admin-ui-for-spring-boot-1ccf</link>
      <guid>https://dev.to/rockandnull/introducing-pale-blue-spring-admin-auto-generated-admin-ui-for-spring-boot-1ccf</guid>
      <description>&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%2Fimages.unsplash.com%2Fphoto-1525443205289-b4944046aa32%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDI0fHxjb250cm9sfGVufDB8fHx8MTc2Mjk5MDgxN3ww%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" 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%2Fimages.unsplash.com%2Fphoto-1525443205289-b4944046aa32%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDI0fHxjb250cm9sfGVufDB8fHx8MTc2Mjk5MDgxN3ww%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" alt="Introducing Pale Blue Spring Admin: auto-generated admin UI for Spring Boot" width="2000" height="1333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At Pale Blue, we’ve always admired the magic of &lt;strong&gt;Django Admin&lt;/strong&gt; - that moment when you define your models and instantly get a clean, intuitive interface to browse, search, and manage your data. When we transitioned our backend stack to &lt;strong&gt;Spring Boot&lt;/strong&gt; , we missed that simplicity — the ability to &lt;em&gt;see and interact&lt;/em&gt; with our data models without writing extra code or wiring up a custom UI.&lt;/p&gt;

&lt;p&gt;So… we built it.&lt;/p&gt;

&lt;p&gt;We’re excited to announce the release of our second open-source library: &lt;a href="https://github.com/PaleBlueApps/pale-blue-spring-admin?ref=paleblueapps.com" rel="noopener noreferrer"&gt;&lt;strong&gt;pale-blue-spring-admin&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What It Does
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Pale Blue Spring Admin&lt;/strong&gt; brings an &lt;strong&gt;auto-generated admin interface&lt;/strong&gt; to your Spring Boot applications - inspired by Django’s admin, but built for the &lt;strong&gt;Spring + Kotlin&lt;/strong&gt; ecosystem.&lt;/p&gt;

&lt;p&gt;Once you install the library, it &lt;strong&gt;auto-discovers your JPA entities&lt;/strong&gt; and exposes them through an &lt;strong&gt;intuitive web interface&lt;/strong&gt;. From there, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browse all entities in your database&lt;/li&gt;
&lt;li&gt;View records with pagination, search, and basic sorting&lt;/li&gt;
&lt;li&gt;Navigate relationships through linked foreign keys&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Currently, the interface is &lt;strong&gt;read-only&lt;/strong&gt; , but we’re already working on &lt;strong&gt;write operations&lt;/strong&gt; (create, update, delete) for a future release.&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%2Fqkgqumh56s3nt2zn8rt8.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%2Fqkgqumh56s3nt2zn8rt8.png" alt="Introducing Pale Blue Spring Admin: auto-generated admin UI for Spring Boot" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Designed with simplicity in mind
&lt;/h3&gt;

&lt;p&gt;One of our core goals was simplicity. We wanted developers to drop the library into their Spring Boot project, define their JPA entities as usual, and immediately get a clean, intuitive interface - no boilerplate, no manual wiring, no custom views to maintain. The admin UI is intentionally minimal, predictable, and easy to navigate, making data exploration effortless even in large projects.&lt;/p&gt;

&lt;p&gt;Access to the admin interface must be explicitly defined, giving you full control over who can reach it and how they authenticate. In our documentation, we also provide a recommended lightweight authentication setup to help teams secure the admin area quickly, while still allowing more advanced configurations if needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Built in Kotlin. For Kotlin.
&lt;/h3&gt;

&lt;p&gt;This project is also a milestone for us - &lt;strong&gt;our first backend library written entirely in Kotlin&lt;/strong&gt; , marking our ongoing shift to Kotlin for backend development. We love the clarity and expressiveness Kotlin brings to Spring Boot projects, and we’re excited to contribute something useful back to the Kotlin and Spring communities.&lt;/p&gt;

&lt;h3&gt;
  
  
  Get Started
&lt;/h3&gt;

&lt;p&gt;The library is open-source and available now: &lt;a href="https://github.com/PaleBlueApps/pale-blue-spring-admin?ref=paleblueapps.com" rel="noopener noreferrer"&gt;github.com/PaleBlueApps/pale-blue-spring-admin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We’d love your feedback, contributions, and ideas on how to make it even better.&lt;/p&gt;

</description>
      <category>kotlin</category>
      <category>backend</category>
    </item>
    <item>
      <title>The rewrite dilemma in software engineering</title>
      <dc:creator>RockAndNull</dc:creator>
      <pubDate>Thu, 06 Nov 2025 12:10:38 +0000</pubDate>
      <link>https://dev.to/rockandnull/the-rewrite-dilemma-in-software-engineering-446h</link>
      <guid>https://dev.to/rockandnull/the-rewrite-dilemma-in-software-engineering-446h</guid>
      <description>&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%2Fimages.unsplash.com%2Fphoto-1677864234709-bde08838fb9d%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDR8fGxvb3B8ZW58MHx8fHwxNzYyNDMxMDEzfDA%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" 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%2Fimages.unsplash.com%2Fphoto-1677864234709-bde08838fb9d%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDR8fGxvb3B8ZW58MHx8fHwxNzYyNDMxMDEzfDA%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" alt="The rewrite dilemma in software engineering" width="2000" height="1333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Rewriting software is a topic that sparks endless debates among engineers. The first reaction when joining an existing project is often: “This is a mess, let’s start fresh”. It’s tempting to imagine a perfect, clean system - elegant architecture, fewer compromises, faster development.&lt;/p&gt;

&lt;p&gt;Sometimes a rewrite is justified. But what’s often overlooked are the small fixes, edge case patches, and tweaks accumulated over time. That “messy” system is often stable because of these hard-earned adjustments.&lt;/p&gt;

&lt;p&gt;A rewrite might feel faster initially, but regaining that stability - rediscovering subtle fixes, handling edge cases, and testing thoroughly - often takes longer than improving the existing code.&lt;/p&gt;

&lt;p&gt;The key is balance. Rewrites aren’t inherently bad, but they come with hidden costs. Stability, accumulated fixes, and historical knowledge are valuable, and any rewrite should account for them before lighting the match.&lt;/p&gt;

&lt;p&gt;Don’t chase perfection blindly - sometimes improving what works is smarter than starting over.&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>thoughts</category>
    </item>
    <item>
      <title>T-Shaped engineers: the blueprint for building with AI</title>
      <dc:creator>RockAndNull</dc:creator>
      <pubDate>Thu, 23 Oct 2025 14:11:21 +0000</pubDate>
      <link>https://dev.to/rockandnull/t-shaped-engineers-the-blueprint-for-building-with-ai-2d2a</link>
      <guid>https://dev.to/rockandnull/t-shaped-engineers-the-blueprint-for-building-with-ai-2d2a</guid>
      <description>&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%2Fimages.unsplash.com%2Fphoto-1520641147456-f78b3e1d83b6%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDR8fFR8ZW58MHx8fHwxNzYxMjI4NDMyfDA%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" 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%2Fimages.unsplash.com%2Fphoto-1520641147456-f78b3e1d83b6%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDR8fFR8ZW58MHx8fHwxNzYxMjI4NDMyfDA%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" alt="T-Shaped engineers: the blueprint for building with AI" width="800" height="531"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The concept of the T-shaped engineer isn't new. It's been around, quietly championed by forward-thinking tech leaders and organizations. But in 2025, as LLMs transform how we build software, this professional archetype has evolved from "nice to have" to essential.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes an Engineer T-Shaped?
&lt;/h2&gt;

&lt;p&gt;Picture the letter T. The horizontal bar represents breadth - a working knowledge across a wide range of technologies, methodologies, and domains. The vertical stem represents depth - expert-level mastery in one or a few specific areas.&lt;/p&gt;

&lt;p&gt;A T-shaped engineer might have deep expertise in distributed systems architecture while maintaining conversational fluency in frontend frameworks, DevOps practices, data engineering, and security principles. They can collaborate meaningfully with specialists across disciplines because they understand the fundamentals, even if they're not experts in everything.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI Amplification Effect
&lt;/h2&gt;

&lt;p&gt;Here's where the AI era changes everything.&lt;/p&gt;

&lt;p&gt;With LLMs, both general SOTA models and countless domain-specific models, the barrier to working across multiple technologies has dropped dramatically. An engineer with fundamental understanding can now leverage AI to scaffold applications in languages they haven't touched in years, generate infrastructure-as-code configurations, or even implement features in unfamiliar frameworks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The breadth of the T becomes supercharged.&lt;/strong&gt;  That conversational knowledge of various domains? It's now enough to effectively direct AI tools to produce working solutions across technologies you don't use daily.&lt;/p&gt;

&lt;p&gt;But here's the critical insight:  &lt;strong&gt;AI is a powerful accelerator, but it's not infallible.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Depth as the Safety Net
&lt;/h2&gt;

&lt;p&gt;This is where the depth of the T becomes your organization's safety net and quality standard.&lt;/p&gt;

&lt;p&gt;In your areas of deep expertise, you can catch AI hallucinations and incorrect implementations before they reach production, guide AI tools toward best practices that go beyond surface-level correctness, make architectural decisions that AI can't reliably make on its own, identify security vulnerabilities or performance issues that AI-generated code might introduce, and maintain high standards even when moving fast with AI assistance.&lt;/p&gt;

&lt;p&gt;Think of it this way: AI gives you the ability to paint across a massive canvas. Your depth expertise ensures that the critical parts of that painting are museum-quality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Growing T-Shaped Engineers
&lt;/h2&gt;

&lt;p&gt;Becoming T-shaped isn't about forcing engineers to master everything. It's about recognizing and developing depth in areas where engineers show natural aptitude and interest, encouraging curiosity across domains without demanding mastery, creating opportunities for meaningful exposure to different parts of the stack, and celebrating both deep expertise and collaborative breadth.&lt;/p&gt;

&lt;p&gt;The engineers who will define the next decade aren't those who can do everything or those who know only one thing. They're the ones who can go deep where it matters and go wide where AI can help - combining human expertise with artificial intelligence to build better software, faster and more safely than either could alone.&lt;/p&gt;

&lt;p&gt;The T-shaped engineer isn't just relevant in the AI era. It's the blueprint for how exceptional engineers will work.&lt;/p&gt;

</description>
      <category>thoughts</category>
      <category>softwareengineering</category>
    </item>
  </channel>
</rss>
