<?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>The future might not have source files</title>
      <dc:creator>RockAndNull</dc:creator>
      <pubDate>Thu, 30 Jul 2026 15:51:05 +0000</pubDate>
      <link>https://dev.to/rockandnull/the-future-might-not-have-source-files-4j1j</link>
      <guid>https://dev.to/rockandnull/the-future-might-not-have-source-files-4j1j</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-1515879218367-8466d910aaa4%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDF8fHNvdXJjZSUyMGNvZGV8ZW58MHx8fHwxNzg1NDI2NTM2fDA%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-1515879218367-8466d910aaa4%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDF8fHNvdXJjZSUyMGNvZGV8ZW58MHx8fHwxNzg1NDI2NTM2fDA%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" alt="The future might not have source files" width="2000" height="1335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For decades, we optimized code for humans. We said that we write code for other humans to read, not for the machines.&lt;/p&gt;

&lt;p&gt;Meaningful names, clean abstractions, consistent formatting, comments when necessary. The assumption was simple: someone else, or future you, would eventually read it.&lt;/p&gt;

&lt;p&gt;Even when LLMs first appeared, that assumption mostly held. I'm no longer convinced that's where we're heading.&lt;/p&gt;

&lt;p&gt;A good example is &lt;a href="https://antigravity.google/?ref=paleblueapps.com" rel="noopener noreferrer"&gt;Google's Antigravity IDE&lt;/a&gt;. It started as an AI-powered IDE. Today, it has largely removed the editor and focuses on reviewing what the AI produced. The interface itself reflects a shift: less writing, more verification.&lt;/p&gt;

&lt;p&gt;Another instance is that people are already experimenting with asking LLMs &lt;a href="https://isene.org/2026/07/Frame.html?ref=paleblueapps.com" rel="noopener noreferrer"&gt;to generate assembly directly&lt;/a&gt;, skipping human-readable source code altogether. If humans never need to touch the code, why optimize it for us?&lt;/p&gt;

&lt;p&gt;We're not there yet.&lt;/p&gt;

&lt;p&gt;Human-readable code still has real advantages. It costs fewer tokens for both reading and writing, it's easier to inspect when something goes wrong, and manual debugging is still invaluable. Today's AI also benefits from well-structured source code.&lt;/p&gt;

&lt;p&gt;But the trend is interesting. As models become better at generating, understanding, and fixing software, human-readable code may become more of a convenience than a requirement.&lt;/p&gt;

&lt;p&gt;Interesting times; let's see where this trend leads us.&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>thoughts</category>
    </item>
    <item>
      <title>The age of deterministic software engineering is over</title>
      <dc:creator>RockAndNull</dc:creator>
      <pubDate>Thu, 09 Jul 2026 12:35:59 +0000</pubDate>
      <link>https://dev.to/rockandnull/the-age-of-deterministic-software-engineering-is-over-370n</link>
      <guid>https://dev.to/rockandnull/the-age-of-deterministic-software-engineering-is-over-370n</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-1629898168297-c868a0d70ad0%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDF8fHNlYXQlMjBiZWx0fGVufDB8fHx8MTc4MzYwMDQxMHww%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-1629898168297-c868a0d70ad0%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDF8fHNlYXQlMjBiZWx0fGVufDB8fHx8MTc4MzYwMDQxMHww%26ixlib%3Drb-4.1.0%26q%3D80%26w%3D2000" alt="The age of deterministic software engineering is over" width="2000" height="1328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For decades, software engineering has been built around one core assumption: &lt;strong&gt;the same input should always produce the same output&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We designed deterministic architectures. We wrote deterministic code. We reviewed pull requests looking for correctness. We built test suites to guarantee reproducibility. We invested in CI pipelines, QA processes, and release gates because software was expected to behave predictably.&lt;/p&gt;

&lt;p&gt;Then LLMs arrived.&lt;/p&gt;

&lt;p&gt;Today, many engineering teams willingly accept that asking the same model the same question twice may produce different answers. AI-generated code may solve the same problem in multiple ways (just like humans). Agentic workflows make autonomous decisions that are probabilistic by nature. Instead of eliminating uncertainty, we embrace it because it unlocks something we have never had before: &lt;strong&gt;orders-of-magnitude improvements in productivity&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is a fundamental shift.&lt;/p&gt;

&lt;p&gt;The deterministic mindset that shaped modern software engineering is no longer sufficient. That doesn't mean correctness no longer matters. It means that correctness is achieved differently.&lt;/p&gt;

&lt;p&gt;Instead of asking whether every step can be deterministic, we now ask whether we can detect wrong outputs, verify the important properties, recover safely from failures, and build feedback loops that continuously improve results.&lt;/p&gt;

&lt;p&gt;This doesn't only affect AI features. It affects how we write code, review pull requests, test applications, and even how we think about architecture. Engineers are becoming supervisors of intelligent systems rather than authors of every single line of code.&lt;/p&gt;

&lt;p&gt;The goal isn't to remove uncertainty. It's to manage it.&lt;/p&gt;

&lt;p&gt;The companies that succeed won't be the ones pretending AI behaves like traditional software. They'll be the ones building processes, tooling, and architectures that acknowledge uncertainty while still delivering reliable products.&lt;/p&gt;

&lt;p&gt;This isn't a temporary trend. It's a reset of our software engineering intuition.&lt;/p&gt;

&lt;p&gt;AI-assisted software development is here to stay. Our challenge is no longer choosing between &lt;strong&gt;quality&lt;/strong&gt; and &lt;strong&gt;velocity&lt;/strong&gt;. It's learning how to achieve both in a world where not everything is deterministic anymore.&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>artificialintelligen</category>
    </item>
    <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>
  </channel>
</rss>
