<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Rock and Null]]></title><description><![CDATA[Tech, software and whatever comes to mind.]]></description><link>https://www.paleblueapps.com/rockandnull/</link><image><url>https://www.paleblueapps.com/rockandnull/favicon.png</url><title>Rock and Null</title><link>https://www.paleblueapps.com/rockandnull/</link></image><generator>Ghost 5.80</generator><lastBuildDate>Thu, 01 Oct 2026 12:01:37 GMT</lastBuildDate><atom:link href="https://www.paleblueapps.com/rockandnull/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[The age of customized software or custom-made software?]]></title><description><![CDATA[AI is changing the economics of custom software. The future may not be everyone building from scratch, but rather customizing a strong software base to fit their specific needs.]]></description><link>https://www.paleblueapps.com/rockandnull/age-of-customized-software/</link><guid isPermaLink="false">6a85a57d6c985d00011d1561</guid><category><![CDATA[Thoughts]]></category><category><![CDATA[Software engineering]]></category><dc:creator><![CDATA[Mike Yerou]]></dc:creator><pubDate>Tue, 01 Sep 2026 12:42:38 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1594026112284-02bb6f3352fe?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDMwfHxjdXN0b218ZW58MHx8fHwxNzg3MTQ1MTAyfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1594026112284-02bb6f3352fe?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDMwfHxjdXN0b218ZW58MHx8fHwxNzg3MTQ1MTAyfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="The age of customized software or custom-made software?"><p>For most of the history of software, we&apos;ve adapted ourselves to the software.</p><p>You choose a CRM, accounting system, project-management tool, or operating system, and then configure your work around what it allows.</p><p>That may be changing.</p><p>AI coding agents and &#x201C;vibe coding&#x201D; have dramatically lowered the cost of building software for a specific need. The old problem with custom software was maintenance: someone had to build it, fix it, update it, and keep it running. That problem hasn&apos;t disappeared, but the cost of doing it is changing.</p><p>Still, I don&apos;t think everyone will become a software builder. </p><p>The more interesting future is maybe <strong>customization on top of a solid base</strong>.</p><p>The platform provides the difficult parts, the infrastructure, security, and a potentially strong base to work on, and you customize from there using prompts and AI. The user then customizes the experience and functionality around their needs.</p><p><a href="https://blog.cloudflare.com/cloudflare-os/?ref=paleblueapps.com" rel="noreferrer">Cloudflare OS</a> and <a href="https://pi.dev/?ref=paleblueapps.com" rel="noreferrer">the Pi Agent Harness</a> are interesting examples of this broader pattern: provide a capable foundation, then allow users or agents to build on top of it.</p><p>It could be the next evolution of software.</p><p>Not thousands of completely custom applications maintained independently, and not one generic application for everyone.</p><p>Maybe the future isn&apos;t building your own software. Maybe it&apos;s making existing software truly yours.</p>]]></content:encoded></item><item><title><![CDATA[The future might not have source files]]></title><description><![CDATA[For decades, we wrote code for humans. As AI becomes both the author and the primary reader of software, developers may spend less time writing code and more time verifying that it matches their intent.]]></description><link>https://www.paleblueapps.com/rockandnull/the-future-might-not-have-source-files/</link><guid isPermaLink="false">6a6b71bb9a2e350001789dfa</guid><category><![CDATA[Software engineering]]></category><category><![CDATA[Thoughts]]></category><dc:creator><![CDATA[Mike Yerou]]></dc:creator><pubDate>Thu, 30 Jul 2026 15:51:05 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1515879218367-8466d910aaa4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHNvdXJjZSUyMGNvZGV8ZW58MHx8fHwxNzg1NDI2NTM2fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1515879218367-8466d910aaa4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHNvdXJjZSUyMGNvZGV8ZW58MHx8fHwxNzg1NDI2NTM2fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="The future might not have source files"><p>For decades, we optimized code for humans. We said that we write code for other humans to read, not for the machines.</p><p>Meaningful names, clean abstractions, consistent formatting, comments when necessary. The assumption was simple: someone else, or future you, would eventually read it.</p><p>Even when LLMs first appeared, that assumption mostly held. I&apos;m no longer convinced that&apos;s where we&apos;re heading.</p><p>A good example is <a href="https://antigravity.google/?ref=paleblueapps.com" rel="noreferrer">Google&apos;s Antigravity IDE</a>. 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.</p><p>Another instance is that people are already experimenting with asking LLMs <a href="https://isene.org/2026/07/Frame.html?ref=paleblueapps.com" rel="noreferrer">to generate assembly directly</a>, skipping human-readable source code altogether. If humans never need to touch the code, why optimize it for us?</p><p>We&apos;re not there yet.</p><p>Human-readable code still has real advantages. It costs fewer tokens for both reading and writing, it&apos;s easier to inspect when something goes wrong, and manual debugging is still invaluable. Today&apos;s AI also benefits from well-structured source code.</p><p>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.</p><p>Interesting times; let&apos;s see where this trend leads us.</p>]]></content:encoded></item><item><title><![CDATA[The age of deterministic software engineering is over]]></title><description><![CDATA[Software engineering has entered a probabilistic era. As LLMs replace deterministic workflows with uncertainty, the challenge is no longer eliminating variability; it's building systems that deliver both high quality and high development velocity despite it.]]></description><link>https://www.paleblueapps.com/rockandnull/the-age-of-deterministic-software-engineering-is-over/</link><guid isPermaLink="false">6a4f932b9a2e350001789d37</guid><category><![CDATA[Software engineering]]></category><category><![CDATA[Artificial Intelligence]]></category><dc:creator><![CDATA[Mike Yerou]]></dc:creator><pubDate>Thu, 09 Jul 2026 12:35:59 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1629898168297-c868a0d70ad0?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHNlYXQlMjBiZWx0fGVufDB8fHx8MTc4MzYwMDQxMHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1629898168297-c868a0d70ad0?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHNlYXQlMjBiZWx0fGVufDB8fHx8MTc4MzYwMDQxMHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="The age of deterministic software engineering is over"><p>For decades, software engineering has been built around one core assumption: <strong>the same input should always produce the same output</strong>.</p><p>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.</p><p>Then LLMs arrived.</p><p>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: <strong>orders-of-magnitude improvements in productivity</strong>.</p><p>This is a fundamental shift.</p><p>The deterministic mindset that shaped modern software engineering is no longer sufficient. That doesn&apos;t mean correctness no longer matters. It means that correctness is achieved differently.</p><p>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.</p><p>This doesn&apos;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.</p><p>The goal isn&apos;t to remove uncertainty. It&apos;s to manage it.</p><p>The companies that succeed won&apos;t be the ones pretending AI behaves like traditional software. They&apos;ll be the ones building processes, tooling, and architectures that acknowledge uncertainty while still delivering reliable products.</p><p>This isn&apos;t a temporary trend. It&apos;s a reset of our software engineering intuition.</p><p>AI-assisted software development is here to stay. Our challenge is no longer choosing between <strong>quality</strong> and <strong>velocity</strong>. It&apos;s learning how to achieve both in a world where not everything is deterministic anymore.</p>]]></content:encoded></item><item><title><![CDATA[LLMs changed writing. But our submission processes haven’t caught up.]]></title><description><![CDATA[LLMs are changing how we write, communicate, and evaluate information, but many submission and proposal processes are still designed for a pre-AI era. If AI generates documents and is later summarized by AI, maybe it’s time to optimize for clarity, bullet points, and essence instead of length.]]></description><link>https://www.paleblueapps.com/rockandnull/llms-changed-writing-submission-processes-have-not-caught-up/</link><guid isPermaLink="false">6a183a84c2716300019db19c</guid><category><![CDATA[Thoughts]]></category><category><![CDATA[Artificial Intelligence]]></category><dc:creator><![CDATA[Mike Yerou]]></dc:creator><pubDate>Thu, 28 May 2026 12:55:38 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1544396821-4dd40b938ad3?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDN8fGJ1cmVhdWNyYWN5fGVufDB8fHx8MTc3OTk3Mjg1Mnww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1544396821-4dd40b938ad3?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDN8fGJ1cmVhdWNyYWN5fGVufDB8fHx8MTc3OTk3Mjg1Mnww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="LLMs changed writing. But our submission processes haven&#x2019;t caught up."><p>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. </p><p>We are effectively using AI to expand text, only to use AI again to compress it.</p><p>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. <strong>Length itself was often interpreted as effort, seriousness, or competence.</strong> Today, everyone has access to tools that can generate pages of convincing text in seconds, and this changes the value of written communication.</p><p>If the real goal is to communicate ideas, requirements, risks, timelines, or proposals, then we should <strong>optimize for clarity and essence</strong> 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.</p><p>Otherwise, the workflow becomes absurd: use an LLM to generate 20 pages, use another LLM to summarize the 20 pages, then read the summary. </p><p>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.</p>]]></content:encoded></item><item><title><![CDATA[Promies Code Distribution: A hassle-free way to manage app giveaways]]></title><description><![CDATA[A smarter way to manage and distribute your app promo codes with the all-new Promies. Effortlessly build customizable promotion pages, protect your codes from bot abuse, and get free organic exposure to kickstart your app's growth.]]></description><link>https://www.paleblueapps.com/rockandnull/app-promo-code-distribution-system/</link><guid isPermaLink="false">6a0ee26bc2716300019db0bf</guid><category><![CDATA[Android]]></category><category><![CDATA[iOS]]></category><dc:creator><![CDATA[Mike Yerou]]></dc:creator><pubDate>Thu, 21 May 2026 12:24:10 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1647221598091-880219fa2c8f?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDJ8fGdpdmVhd2F5fGVufDB8fHx8MTc3OTM2MTc1Mnww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1647221598091-880219fa2c8f?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDJ8fGdpdmVhd2F5fGVufDB8fHx8MTc3OTM2MTc1Mnww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="Promies Code Distribution: A hassle-free way to manage app giveaways"><p>We originally built <a href="https://www.promies.net/?ref=paleblueapps.com" rel="noreferrer">Promies</a> 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.</p><p>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.</p><p>If you&#x2019;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.</p><h3 id="from-spreadsheet-chaos-to-batches">From spreadsheet chaos to &quot;batches&quot;</h3><p>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.</p><p>With Promies, you can take those exported codes and insert them into what we call a <strong>&quot;batch&quot;</strong> in the code repository. Think of a batch as a clean, digital container for a specific set of codes you&apos;ve generated.</p><figure class="kg-card kg-image-card"><img src="https://www.paleblueapps.com/rockandnull/content/images/2026/05/271_1x_shots_so.png" class="kg-image" alt="Promies Code Distribution: A hassle-free way to manage app giveaways" loading="lazy" width="1920" height="1440" srcset="https://www.paleblueapps.com/rockandnull/content/images/size/w600/2026/05/271_1x_shots_so.png 600w, https://www.paleblueapps.com/rockandnull/content/images/size/w1000/2026/05/271_1x_shots_so.png 1000w, https://www.paleblueapps.com/rockandnull/content/images/size/w1600/2026/05/271_1x_shots_so.png 1600w, https://www.paleblueapps.com/rockandnull/content/images/2026/05/271_1x_shots_so.png 1920w" sizes="(min-width: 720px) 720px"></figure><h3 id="creating-and-sharing-promotions">Creating and sharing Promotions</h3><p>Once your batches are set up, you can create a <strong>&quot;promotion.&quot;</strong> A promotion can pull promo codes from one batch or even combine codes from multiple batches.</p><p>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.</p><p>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.</p><figure class="kg-card kg-image-card"><img src="https://www.paleblueapps.com/rockandnull/content/images/2026/05/496_1x_shots_so.png" class="kg-image" alt="Promies Code Distribution: A hassle-free way to manage app giveaways" loading="lazy" width="1920" height="1440" srcset="https://www.paleblueapps.com/rockandnull/content/images/size/w600/2026/05/496_1x_shots_so.png 600w, https://www.paleblueapps.com/rockandnull/content/images/size/w1000/2026/05/496_1x_shots_so.png 1000w, https://www.paleblueapps.com/rockandnull/content/images/size/w1600/2026/05/496_1x_shots_so.png 1600w, https://www.paleblueapps.com/rockandnull/content/images/2026/05/496_1x_shots_so.png 1920w" sizes="(min-width: 720px) 720px"></figure><h3 id="tailor-the-giveaway-experience">Tailor the giveaway experience</h3><p>Every app campaign has different goals, so we built plenty of ways to customize your promotion pages. </p><p>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. </p><p>To highlight the true value of what you&apos;re giving away, you can display before-and-after pricing so users have context on the value they are receiving. We&apos;ve also packed in several other customization options to drive engagement, such as displaying the code&apos;s expiration date or setting up limited availability thresholds to create a sense of urgency. </p><p>Finally, sometimes a user grabs a code only to realize they can&apos;t use it or have already unlocked the feature. We&apos;ve added a button that allows users to seamlessly return a code, instantly throwing it back into the pool for someone else to enjoy.</p><figure class="kg-card kg-image-card"><img src="https://www.paleblueapps.com/rockandnull/content/images/2026/05/886_1x_shots_so.png" class="kg-image" alt="Promies Code Distribution: A hassle-free way to manage app giveaways" loading="lazy" width="1920" height="1440" srcset="https://www.paleblueapps.com/rockandnull/content/images/size/w600/2026/05/886_1x_shots_so.png 600w, https://www.paleblueapps.com/rockandnull/content/images/size/w1000/2026/05/886_1x_shots_so.png 1000w, https://www.paleblueapps.com/rockandnull/content/images/size/w1600/2026/05/886_1x_shots_so.png 1600w, https://www.paleblueapps.com/rockandnull/content/images/2026/05/886_1x_shots_so.png 1920w" sizes="(min-width: 720px) 720px"></figure><h3 id="getting-free-exposure-for-your-apps">Getting free exposure for your apps</h3><p>On top of making the logistics effortless, we also want to help you actually get eyes on your work.</p><p>On our <a href="https://www.promies.net/promotions?ref=paleblueapps.com" rel="noreferrer">homepage</a>, we prominently showcase recent public promotions, allowing you to gather new users organically right from the platform. Additionally, we are now sending out a <a href="https://www.promies.net/?ref=paleblueapps.com" rel="noreferrer">monthly newsletter</a> featuring the best recent promotions directly to our subscribers, driving even more exposure to your apps.</p><figure class="kg-card kg-image-card"><img src="https://www.paleblueapps.com/rockandnull/content/images/2026/05/942_1x_shots_so.png" class="kg-image" alt="Promies Code Distribution: A hassle-free way to manage app giveaways" loading="lazy" width="1920" height="1440" srcset="https://www.paleblueapps.com/rockandnull/content/images/size/w600/2026/05/942_1x_shots_so.png 600w, https://www.paleblueapps.com/rockandnull/content/images/size/w1000/2026/05/942_1x_shots_so.png 1000w, https://www.paleblueapps.com/rockandnull/content/images/size/w1600/2026/05/942_1x_shots_so.png 1600w, https://www.paleblueapps.com/rockandnull/content/images/2026/05/942_1x_shots_so.png 1920w" sizes="(min-width: 720px) 720px"></figure><p>Give it a spin for your next giveaway and let us know your thoughts! </p><p>If you do not already have one, you can <a href="https://www.promies.net/developer?ref=paleblueapps.com" rel="noreferrer">sign up for a Promies developer account</a> and get started quickly.</p>]]></content:encoded></item><item><title><![CDATA[Pale Blue Spring Admin: Now you can actually edit stuff (and custom UI snippets)]]></title><description><![CDATA[Read-only is great, but editing is better. The latest update to Pale Blue Spring Admin introduces full CRUD functionality and custom UI snippets, making your Spring Boot admin panel as powerful as your favorite Python tools.]]></description><link>https://www.paleblueapps.com/rockandnull/spring-boot-admin-crud-custom-ui/</link><guid isPermaLink="false">6a05ae93c2716300019daffd</guid><category><![CDATA[spring boot]]></category><category><![CDATA[Kotlin]]></category><category><![CDATA[Backend]]></category><category><![CDATA[Infra]]></category><dc:creator><![CDATA[Mike Yerou]]></dc:creator><pubDate>Thu, 14 May 2026 11:57:06 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1586776977607-310e9c725c37?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fGZpeHxlbnwwfHx8fDE3Nzg3NTc5ODN8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1586776977607-310e9c725c37?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fGZpeHxlbnwwfHx8fDE3Nzg3NTc5ODN8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="Pale Blue Spring Admin: Now you can actually edit stuff (and custom UI snippets)"><p>When we first <a href="https://www.paleblueapps.com/rockandnull/pale-blue-spring-admin-django-admin-for-spring-boot/" rel="noreferrer">introduced Pale Blue Spring Admin</a>, it was a bit of a tease. You could look, but you couldn&apos;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 &quot;Swiss Army Knife&quot; experience of Django Admin.</p><p>Our goal has always been simple: we love Kotlin and the Spring Boot ecosystem, but we missed the &quot;it just works&quot; productivity of Python/Django.</p><p>With the latest release, we are happy to say we believe we have come closer to bridging that gap.</p><h2 id="the-missing-crud">The missing CRUD</h2><p>The headline feature is simple: <strong>Editing is here.</strong> 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 &quot;zero-config&quot; promise alive.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.paleblueapps.com/rockandnull/content/images/2026/05/69_1x_shots_so.png" class="kg-image" alt="Pale Blue Spring Admin: Now you can actually edit stuff (and custom UI snippets)" loading="lazy" width="1920" height="1440" srcset="https://www.paleblueapps.com/rockandnull/content/images/size/w600/2026/05/69_1x_shots_so.png 600w, https://www.paleblueapps.com/rockandnull/content/images/size/w1000/2026/05/69_1x_shots_so.png 1000w, https://www.paleblueapps.com/rockandnull/content/images/size/w1600/2026/05/69_1x_shots_so.png 1600w, https://www.paleblueapps.com/rockandnull/content/images/2026/05/69_1x_shots_so.png 1920w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Add, edit, update, delete now supported</span></figcaption></figure><h2 id="beyond-the-grid-custom-ui-snippets">Beyond the grid: Custom UI snippets</h2><p>One of the main reasons people eventually outgrow auto-generated admins is the &quot;walled garden&quot; 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.</p><p>To solve this, we&#x2019;ve added <strong>Custom UI Snippets</strong>. You can now define your own UI elements to extend the portal. Whether it&apos;s a specialized dashboard widget or a custom action button, you can inject your own logic and components without fighting the library.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.paleblueapps.com/rockandnull/content/images/2026/05/833_1x_shots_so.png" class="kg-image" alt="Pale Blue Spring Admin: Now you can actually edit stuff (and custom UI snippets)" loading="lazy" width="1920" height="1440" srcset="https://www.paleblueapps.com/rockandnull/content/images/size/w600/2026/05/833_1x_shots_so.png 600w, https://www.paleblueapps.com/rockandnull/content/images/size/w1000/2026/05/833_1x_shots_so.png 1000w, https://www.paleblueapps.com/rockandnull/content/images/size/w1600/2026/05/833_1x_shots_so.png 1600w, https://www.paleblueapps.com/rockandnull/content/images/2026/05/833_1x_shots_so.png 1920w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Custom UI snippet at the bottom of the admin portal</span></figcaption></figure><h3 id="closing-the-gap">Closing the gap</h3><p>With these additions, we believe we are very close to feature parity with the core functionality of Django Admin.</p><p>We want to write backend code in our favorite language, Kotlin, with the same velocity as the Python ecosystem. We&#x2019;re building this for ourselves, but we hope it makes your life easier too.</p><p><strong>Give it a spin:</strong> <a href="https://github.com/PaleBlueApps/pale-blue-spring-admin?ref=paleblueapps.com" rel="noopener">Pale Blue Spring Admin</a></p><p>Try it out, and let us know what you think. </p><p>Happy coding!</p>]]></content:encoded></item><item><title><![CDATA[Promies Feedback Board: A simple way to collect user feedback in your apps]]></title><description><![CDATA[Promies Feedback Board gives you a single, vote-protected hub to see exactly which features your users actually want.]]></description><link>https://www.paleblueapps.com/rockandnull/promies-feedback-board-android-user-feedback-management/</link><guid isPermaLink="false">69f9c4b2c2716300019daf41</guid><category><![CDATA[Android]]></category><category><![CDATA[iOS]]></category><dc:creator><![CDATA[Mike Yerou]]></dc:creator><pubDate>Tue, 05 May 2026 10:46:53 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1509909756405-be0199881695?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDZ8fGZlZWRiYWNrfGVufDB8fHx8MTc3Nzk3ODAyOXww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1509909756405-be0199881695?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDZ8fGZlZWRiYWNrfGVufDB8fHx8MTc3Nzk3ODAyOXww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="Promies Feedback Board: A simple way to collect user feedback in your apps"><p>If you&#x2019;ve shipped even one mobile app, you&#x2019;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.</p><h2 id="introducing-promies-feedback-board">Introducing Promies Feedback Board</h2><p>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.</p><figure class="kg-card kg-image-card"><img src="https://www.paleblueapps.com/rockandnull/content/images/2026/05/970_1x_shots_so.png" class="kg-image" alt="Promies Feedback Board: A simple way to collect user feedback in your apps" loading="lazy" width="1920" height="1440" srcset="https://www.paleblueapps.com/rockandnull/content/images/size/w600/2026/05/970_1x_shots_so.png 600w, https://www.paleblueapps.com/rockandnull/content/images/size/w1000/2026/05/970_1x_shots_so.png 1000w, https://www.paleblueapps.com/rockandnull/content/images/size/w1600/2026/05/970_1x_shots_so.png 1600w, https://www.paleblueapps.com/rockandnull/content/images/2026/05/970_1x_shots_so.png 1920w" sizes="(min-width: 720px) 720px"></figure><p>It is designed to be practical and easy to integrate into your existing workflow. You can customize the board to match <strong>your app&#x2019;s primary color</strong> 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.</p><figure class="kg-card kg-image-card"><img src="https://www.paleblueapps.com/rockandnull/content/images/2026/05/301_1x_shots_so.png" class="kg-image" alt="Promies Feedback Board: A simple way to collect user feedback in your apps" loading="lazy" width="1920" height="1440" srcset="https://www.paleblueapps.com/rockandnull/content/images/size/w600/2026/05/301_1x_shots_so.png 600w, https://www.paleblueapps.com/rockandnull/content/images/size/w1000/2026/05/301_1x_shots_so.png 1000w, https://www.paleblueapps.com/rockandnull/content/images/size/w1600/2026/05/301_1x_shots_so.png 1600w, https://www.paleblueapps.com/rockandnull/content/images/2026/05/301_1x_shots_so.png 1920w" sizes="(min-width: 720px) 720px"></figure><p>Users <strong>can vote on ideas</strong>, helping you identify what is actually important. Voting is protected with a CAPTCHA to avoid spam and abuse. They <strong>can also subscribe to updates</strong>,<strong> </strong>and users will get notified via email when the status changes, for example, when something moves to in progress or is marked as done.</p><h2 id="full-control-for-developers">Full control for developers</h2><p>From the developer side, you have full control over the feedback flow. You <strong>can reply to ideas</strong> and make those responses publicly visible, creating transparency and showing users that their feedback is being acknowledged and acted on.</p><figure class="kg-card kg-image-card"><img src="https://www.paleblueapps.com/rockandnull/content/images/2026/05/836_1x_shots_so-1.png" class="kg-image" alt="Promies Feedback Board: A simple way to collect user feedback in your apps" loading="lazy" width="1920" height="1440" srcset="https://www.paleblueapps.com/rockandnull/content/images/size/w600/2026/05/836_1x_shots_so-1.png 600w, https://www.paleblueapps.com/rockandnull/content/images/size/w1000/2026/05/836_1x_shots_so-1.png 1000w, https://www.paleblueapps.com/rockandnull/content/images/size/w1600/2026/05/836_1x_shots_so-1.png 1600w, https://www.paleblueapps.com/rockandnull/content/images/2026/05/836_1x_shots_so-1.png 1920w" sizes="(min-width: 720px) 720px"></figure><p>You can also <strong>update the status of each idea</strong>, delete entries when needed, and view basic stats to understand what is gaining traction. In addition, you can choose to <strong>receive email notifications for new ideas</strong> so you never miss incoming feedback.</p><figure class="kg-card kg-image-card"><img src="https://www.paleblueapps.com/rockandnull/content/images/2026/05/75_1x_shots_so.png" class="kg-image" alt="Promies Feedback Board: A simple way to collect user feedback in your apps" loading="lazy" width="1920" height="1440" srcset="https://www.paleblueapps.com/rockandnull/content/images/size/w600/2026/05/75_1x_shots_so.png 600w, https://www.paleblueapps.com/rockandnull/content/images/size/w1000/2026/05/75_1x_shots_so.png 1000w, https://www.paleblueapps.com/rockandnull/content/images/size/w1600/2026/05/75_1x_shots_so.png 1600w, https://www.paleblueapps.com/rockandnull/content/images/2026/05/75_1x_shots_so.png 1920w" sizes="(min-width: 720px) 720px"></figure><h2 id="how-we-use-it">How we use it</h2><p>At <a href="https://paleblueapps.com/?ref=paleblueapps.com" rel="noreferrer">Pale Blue</a>, 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. </p><p>This, of course, is not enough, but it gives us a much clearer and more reliable signal on what to build next.</p><h2 id="get-started">Get started</h2><p>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 <a href="https://www.promies.net/developer?ref=paleblueapps.com" rel="noreferrer">sign up for a Promies developer account</a> and get started quickly.</p>]]></content:encoded></item><item><title><![CDATA[The rise of abandonware]]></title><description><![CDATA[AI allows us to ship software instantly, but it’s also fueling a surge of "disposable" projects. The team behind the code matters more than the code itself in the age of AI generation.]]></description><link>https://www.paleblueapps.com/rockandnull/the-rise-of-abandonware/</link><guid isPermaLink="false">69e7840c0f25450001824c8e</guid><category><![CDATA[Software engineering]]></category><category><![CDATA[Thoughts]]></category><category><![CDATA[Artificial Intelligence]]></category><dc:creator><![CDATA[Mike Yerou]]></dc:creator><pubDate>Tue, 21 Apr 2026 14:10:12 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1555493160-1ba56d63b72d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDN8fGFiYWRvbmVkfGVufDB8fHx8MTc3Njc4MDQwN3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1555493160-1ba56d63b72d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDN8fGFiYWRvbmVkfGVufDB8fHx8MTc3Njc4MDQwN3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="The rise of abandonware"><p>The barrier to shipping software has collapsed. With AI code generation, any fleeting idea can become a reality almost instantly.</p><p>But there&#x2019;s a catch: software that is created fast is often abandoned fast.</p><p>We are seeing a surge of &quot;disposable software.&quot; We&#x2019;re guilty of it too. While the cycle of &quot;shiny object syndrome&quot; 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.</p><p>This creates a new landscape of risk. When you choose a library for your stack or a new tool for your workflow, you aren&apos;t just betting on the code, you&#x2019;re betting on the people.</p><p>Code is now cheap and ephemeral. The only true constant is the team behind it. Before you depend on a new project, don&apos;t just look at the features; look at the track record of the maintainers.</p><p>In the age of AI, the code comes and goes. Make sure the humans are staying.</p>]]></content:encoded></item><item><title><![CDATA[The danger of the "ok" project]]></title><description><![CDATA[Most projects don't fail spectacularly; they just linger in the "middle." In a fast-moving AI era, deciding if your current traction is enough to keep going, or if it's time to move on.]]></description><link>https://www.paleblueapps.com/rockandnull/the-danger-of-the-ok-project/</link><guid isPermaLink="false">69cbc191eae9f000018d3007</guid><category><![CDATA[Thoughts]]></category><category><![CDATA[Business]]></category><dc:creator><![CDATA[Mike Yerou]]></dc:creator><pubDate>Tue, 31 Mar 2026 12:48:11 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1527900887130-4c59133ff4a7?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fG1pZGRsZXxlbnwwfHx8fDE3NzQ5NjExNzd8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1527900887130-4c59133ff4a7?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fG1pZGRsZXxlbnwwfHx8fDE3NzQ5NjExNzd8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="The danger of the &quot;ok&quot; project"><p>The hardest part of building a project isn&#x2019;t always dealing with failure. </p><p>It&#x2019;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&#x2019;t a total disaster, but it isn&#x2019;t a hit either. </p><p>It has some users and some traction, but not enough to be a clear success. This is the &quot;middle ground,&quot; 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&#x2019;s a success, the choice to grow is easy. But when it&#x2019;s just &quot;okay,&quot; it stays alive and uses up energy without a certain future.</p><p>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 &quot;okay&quot; now might be outdated in a very short time because tools and markets change every month. The &quot;wait and see&quot; 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.</p><p>Deciding what to do next usually involves a mix of data and intuition. </p><p>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&apos;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.</p>]]></content:encoded></item><item><title><![CDATA[Who is going to train the juniors?]]></title><description><![CDATA[Junior engineers can get instant answers and working code, but risk skipping the hard-earned understanding that comes from struggle. AI is a powerful multiplier for experienced engineers, but without intentional training, it can quietly erode how the next generation is built.]]></description><link>https://www.paleblueapps.com/rockandnull/who-will-train-junior-engineers-in-the-ai-era/</link><guid isPermaLink="false">6984685d8ec22c0001f3c72c</guid><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[Thoughts]]></category><category><![CDATA[Software engineering]]></category><dc:creator><![CDATA[Mike Yerou]]></dc:creator><pubDate>Thu, 05 Feb 2026 09:59:43 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1454165804606-c3d57bc86b40?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDR8fHRlYWNoaW5nfGVufDB8fHx8MTc3MDI4NTUxN3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1454165804606-c3d57bc86b40?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDR8fHRlYWNoaW5nfGVufDB8fHx8MTc3MDI4NTUxN3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="Who is going to train the juniors?"><p>Not long ago, junior engineers learned by working closely with more senior ones.</p><p>Code reviews, design discussions, and mistakes created friction, and that friction built understanding.</p><p>AI changed that.</p><p>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&#x2019;s powerful, and risky.</p><p>During our last internship season, our intern chose not to use AI tools while coding. Short-term productivity suffered. Tasks took longer.</p><p>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&#x2019;s the real distinction.</p><p>AI is great at accelerating experienced engineers. It&#x2019;s bad at replacing the process that creates them. If we remove friction too early, we don&#x2019;t get better engineers, just faster output with hidden gaps. And those gaps surface later, when systems scale or fail.</p><p>This isn&#x2019;t about banning AI. It&#x2019;s about being intentional. Let juniors struggle a bit. Accept short-term productivity loss.</p><p>Otherwise, we&#x2019;re not training the next generation of engineers; we&#x2019;re just shipping code faster.</p>]]></content:encoded></item><item><title><![CDATA[How We Fixed SQLite Database Locks in Spring Boot (And Got a 5x Performance Boost)]]></title><description><![CDATA[Struggling with intermittent database locks in your Spring Boot and SQLite setup? Learn the specific HikariCP and JPA configurations we used to eliminate production hangs and increase throughput by 6.5x.]]></description><link>https://www.paleblueapps.com/rockandnull/spring-boot-sqlite-locking-fix/</link><guid isPermaLink="false">697c7cb29dcdba0001c77e4d</guid><category><![CDATA[spring boot]]></category><category><![CDATA[sqlite]]></category><dc:creator><![CDATA[Anil Kumar Beesetti]]></dc:creator><pubDate>Fri, 30 Jan 2026 10:36:55 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1614064641938-3bbee52942c7?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDN8fExvY2t8ZW58MHx8fHwxNzY5NzY2Mjg3fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1614064641938-3bbee52942c7?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDN8fExvY2t8ZW58MHx8fHwxNzY5NzY2Mjg3fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="How We Fixed SQLite Database Locks in Spring Boot (And Got a 5x Performance Boost)"><p>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&apos;s what we learned.</p><h2 id="the-problem">The Problem</h2><p>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.</p><h2 id="the-root-cause">The Root Cause</h2><p>SQLite is designed differently from traditional client-server databases like PostgreSQL or MySQL. It&apos;s a file-based database that works best with <strong>single-connection access</strong>. However, Spring Boot&apos;s default connection pooling configuration doesn&apos;t account for SQLite&apos;s unique requirements, leading to connection conflicts and database locks.</p><h2 id="the-solution">The Solution</h2><p>We made several targeted configuration changes to our <code>application.properties</code> to optimize Spring Boot for SQLite:</p><h3 id="1-single-connection-pool">1. Single Connection Pool</h3><pre><code class="language-properties">spring.datasource.hikari.maximum-pool-size=1
spring.datasource.hikari.minimum-idle=0
</code></pre><p>SQLite performs best with a single connection. Multiple connections can lead to locking issues, so we configured <a href="https://github.com/brettwooldridge/HikariCP?ref=paleblueapps.com" rel="noreferrer">HikariCP</a> to maintain just one connection at a time.</p><h3 id="2-aggressive-connection-management">2. Aggressive Connection Management</h3><pre><code class="language-properties">spring.datasource.hikari.connection-timeout=10000
spring.datasource.hikari.idle-timeout=10000
spring.datasource.hikari.max-lifetime=30000
</code></pre><p>These settings ensure connections don&apos;t linger unnecessarily, reducing the chance of locks.</p><h3 id="3-leak-detection">3. Leak Detection</h3><pre><code class="language-properties">spring.datasource.hikari.leak-detection-threshold=5000
</code></pre><p>This helps us spot any connections that are held longer than expected, making debugging much easier.</p><h3 id="4-disable-open-in-view">4. Disable Open-in-View</h3><pre><code class="language-properties">spring.jpa.open-in-view=false
</code></pre><p>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.</p><h3 id="5-manual-transaction-control">5. Manual Transaction Control</h3><pre><code class="language-properties">spring.datasource.hikari.auto-commit=false
</code></pre><p>Disabling auto-commit gives us explicit control over transactions, preventing unexpected commits that could cause locking issues.</p><h2 id="the-results">The Results</h2><p>The improvements were dramatic. We load-tested our API using k6 with identical test parameters:</p><p><strong>Before the changes:</strong></p><ul><li>Total requests in 5 minutes: 1,736</li><li>Success rate: 76%</li><li>Failed requests: 411</li></ul><figure class="kg-card kg-image-card"><img src="https://www.paleblueapps.com/rockandnull/content/images/2026/01/Screenshot-2025-12-04-at-3.41.39-PM.png" class="kg-image" alt="How We Fixed SQLite Database Locks in Spring Boot (And Got a 5x Performance Boost)" loading="lazy" width="2000" height="1249" srcset="https://www.paleblueapps.com/rockandnull/content/images/size/w600/2026/01/Screenshot-2025-12-04-at-3.41.39-PM.png 600w, https://www.paleblueapps.com/rockandnull/content/images/size/w1000/2026/01/Screenshot-2025-12-04-at-3.41.39-PM.png 1000w, https://www.paleblueapps.com/rockandnull/content/images/size/w1600/2026/01/Screenshot-2025-12-04-at-3.41.39-PM.png 1600w, https://www.paleblueapps.com/rockandnull/content/images/2026/01/Screenshot-2025-12-04-at-3.41.39-PM.png 2000w" sizes="(min-width: 720px) 720px"></figure><p><strong>After the changes:</strong></p><ul><li>Total requests in 5 minutes: 11,381</li><li>Success rate: 99%</li><li>Failed requests: 1</li></ul><figure class="kg-card kg-image-card"><img src="https://www.paleblueapps.com/rockandnull/content/images/2026/01/Screenshot-2025-12-04-at-3.37.24-PM.png" class="kg-image" alt="How We Fixed SQLite Database Locks in Spring Boot (And Got a 5x Performance Boost)" loading="lazy" width="2000" height="1203" srcset="https://www.paleblueapps.com/rockandnull/content/images/size/w600/2026/01/Screenshot-2025-12-04-at-3.37.24-PM.png 600w, https://www.paleblueapps.com/rockandnull/content/images/size/w1000/2026/01/Screenshot-2025-12-04-at-3.37.24-PM.png 1000w, https://www.paleblueapps.com/rockandnull/content/images/size/w1600/2026/01/Screenshot-2025-12-04-at-3.37.24-PM.png 1600w, https://www.paleblueapps.com/rockandnull/content/images/2026/01/Screenshot-2025-12-04-at-3.37.24-PM.png 2000w" sizes="(min-width: 720px) 720px"></figure><p>That&apos;s a <strong>6.5x increase in throughput</strong> and virtually eliminated failures. More importantly, we haven&apos;t seen a single database lock since deploying these changes.</p><h2 id="key-takeaways">Key Takeaways</h2><ol><li><strong>SQLite isn&apos;t PostgreSQL</strong> - Default Spring Boot configurations are optimized for client-server databases, not file-based ones.</li><li><strong>Single connection is key</strong> - SQLite&apos;s architecture works best with one connection at a time.</li><li><strong>Disable open-in-view</strong> - This JPA pattern is convenient but problematic with SQLite.</li><li><strong>Monitor your connections</strong> - Leak detection helped us identify issues during development.</li></ol><p>If you&apos;re using SQLite with Spring Boot, these configurations can save you from production headaches and give you some nice performance wins along the way.</p>]]></content:encoded></item><item><title><![CDATA[Cog in a great machine VS building one from scratch]]></title><description><![CDATA[Working in a big tech company feels like being a cog in a powerful, well-oiled machine, while launching your own startup means building a smaller machine from scratch and owning every decision. Both paths are exciting, challenging, and valuable, but in completely different ways.]]></description><link>https://www.paleblueapps.com/rockandnull/big-tech-vs-startup-experience/</link><guid isPermaLink="false">697243ea9dcdba0001c77dad</guid><category><![CDATA[Thoughts]]></category><dc:creator><![CDATA[Mike Yerou]]></dc:creator><pubDate>Thu, 22 Jan 2026 15:41:08 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1583198432859-635beb4e8600?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDN8fGNvZ3xlbnwwfHx8fDE3NjkwOTY0MTF8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1583198432859-635beb4e8600?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDN8fGNvZ3xlbnwwfHx8fDE3NjkwOTY0MTF8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="Cog in a great machine VS building one from scratch"><p>Having spent time as a software engineer in a large tech company and later launching my own company, I&#x2019;m often asked which experience is &#x201C;better.&#x201D;<br>The honest answer is: they&#x2019;re both exciting, deeply fulfilling in different ways, and not really comparable.</p><h2 id="being-a-software-engineer-in-a-big-company">Being a software engineer in a big company</h2><p>Working in a big company feels like being a cog in an incredible, well-oiled machine. And I don&#x2019;t mean &#x201C;cog&#x201D; in a negative way.</p><p>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&#x2019;s a process:</p><ul><li>You identify the issue</li><li>You report it</li><li>It moves through product managers, designers, tech leads, and prioritization cycles</li></ul><p>Your responsibility often ends at <em>reporting clearly and correctly</em>. Someone else owns the decision, someone else owns the fix, and that&#x2019;s by design. This separation of concerns is what allows large organizations to scale.</p><p>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&#x2019;s sometimes indirect.</p><h2 id="launching-your-own-company">Launching your own company</h2><p>Starting your own company feels very different.</p><p>Instead of being a cog in a large machine, you&#x2019;re building a much smaller machine from scratch. And at the beginning, you <em>are</em> most of the parts.</p><p>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.</p><p>There&#x2019;s no &#x201C;this isn&#x2019;t my job.&#x201D;</p><p>Even if your official role is &#x201C;software engineer&#x201D; or &#x201C;founder,&#x201D; reality doesn&#x2019;t care. If something needs fixing and you&#x2019;re the best person to do it, then that&#x2019;s what you&#x2019;ll do.</p><p>This can be exhausting, but it&#x2019;s also incredibly energizing. You see the full lifecycle of decisions. You feel the consequences immediately. The feedback loop is short and very real.</p><h2 id="two-exciting-very-different-journeys">Two exciting, very different journeys</h2><p>What I&#x2019;ve learned is that these two worlds shouldn&#x2019;t be compared as better or worse.</p><p>They&#x2019;re simply different journeys:</p><ul><li>Big companies teach you scale, rigor, and depth</li><li>Startups teach you ownership, adaptability, and breadth</li></ul><p>One is about mastering your part of the system.<br>The other is about making sure the system works at all.</p><p>Both are exciting. Both are challenging. And both shape you in ways that stay with you.</p><p>The important thing isn&#x2019;t choosing the &#x201C;right&#x201D; path, but understanding what kind of journey you&#x2019;re on, and why you chose it.</p>]]></content:encoded></item><item><title><![CDATA[Introducing Pale Blue Spring Admin: auto-generated admin UI for Spring Boot]]></title><description><![CDATA[Pale Blue Spring Admin brings Django-style auto-generated admin power to Spring Boot. Built in Kotlin, it offers an intuitive UI for exploring your JPA entities.]]></description><link>https://www.paleblueapps.com/rockandnull/pale-blue-spring-admin-django-admin-for-spring-boot/</link><guid isPermaLink="false">6915d61e271c1a0001d4a6d3</guid><category><![CDATA[Kotlin]]></category><category><![CDATA[Backend]]></category><dc:creator><![CDATA[Mike Yerou]]></dc:creator><pubDate>Fri, 14 Nov 2025 09:54:40 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1525443205289-b4944046aa32?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDI0fHxjb250cm9sfGVufDB8fHx8MTc2Mjk5MDgxN3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1525443205289-b4944046aa32?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDI0fHxjb250cm9sfGVufDB8fHx8MTc2Mjk5MDgxN3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="Introducing Pale Blue Spring Admin: auto-generated admin UI for Spring Boot"><p>At Pale Blue, we&#x2019;ve always admired the magic of <strong>Django Admin</strong> - 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 <strong>Spring Boot</strong>, we missed that simplicity &#x2014; the ability to <em>see and interact</em> with our data models without writing extra code or wiring up a custom UI.</p><p>So&#x2026; we built it.</p><p>We&#x2019;re excited to announce the release of our second open-source library: <a href="https://github.com/PaleBlueApps/pale-blue-spring-admin?ref=paleblueapps.com" rel="noopener"><strong>pale-blue-spring-admin</strong></a></p><h2 id="what-it-does">What It Does</h2><p><strong>Pale Blue Spring Admin</strong> brings an <strong>auto-generated admin interface</strong> to your Spring Boot applications - inspired by Django&#x2019;s admin, but built for the <strong>Spring + Kotlin</strong> ecosystem.</p><p>Once you install the library, it <strong>auto-discovers your JPA entities</strong> and exposes them through an <strong>intuitive web interface</strong>. From there, you can:</p><ul><li>Browse all entities in your database</li><li>View records with pagination, search, and basic sorting</li><li>Navigate relationships through linked foreign keys</li></ul><p>Currently, the interface is <strong>read-only</strong>, but we&#x2019;re already working on <strong>write operations</strong> (create, update, delete) for a future release.</p><figure class="kg-card kg-image-card"><img src="https://www.paleblueapps.com/rockandnull/content/images/2025/11/screely-1763038918759.png" class="kg-image" alt="Introducing Pale Blue Spring Admin: auto-generated admin UI for Spring Boot" loading="lazy" width="1140" height="741" srcset="https://www.paleblueapps.com/rockandnull/content/images/size/w600/2025/11/screely-1763038918759.png 600w, https://www.paleblueapps.com/rockandnull/content/images/size/w1000/2025/11/screely-1763038918759.png 1000w, https://www.paleblueapps.com/rockandnull/content/images/2025/11/screely-1763038918759.png 1140w" sizes="(min-width: 720px) 720px"></figure><h3 id="designed-with-simplicity-in-mind">Designed with simplicity in mind</h3><p>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.</p><p>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.</p><h3 id="built-in-kotlin-for-kotlin">Built in Kotlin. For Kotlin.</h3><p>This project is also a milestone for us - <strong>our first backend library written entirely in Kotlin</strong>, marking our ongoing shift to Kotlin for backend development. We love the clarity and expressiveness Kotlin brings to Spring Boot projects, and we&#x2019;re excited to contribute something useful back to the Kotlin and Spring communities.</p><h3 id="get-started">Get Started</h3><p>The library is open-source and available now: <a href="https://github.com/PaleBlueApps/pale-blue-spring-admin?ref=paleblueapps.com" rel="noopener">github.com/PaleBlueApps/pale-blue-spring-admin</a></p><p>We&#x2019;d love your feedback, contributions, and ideas on how to make it even better.</p>]]></content:encoded></item><item><title><![CDATA[The rewrite dilemma in software engineering]]></title><description><![CDATA[Rewriting software can be tempting, but understanding the hidden value of accumulated fixes and system stability is key to making the right decision.]]></description><link>https://www.paleblueapps.com/rockandnull/rewrites-software-engineering-stability/</link><guid isPermaLink="false">690c8f7a271c1a0001d4a630</guid><category><![CDATA[Software engineering]]></category><category><![CDATA[Thoughts]]></category><dc:creator><![CDATA[Mike Yerou]]></dc:creator><pubDate>Thu, 06 Nov 2025 12:10:38 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1677864234709-bde08838fb9d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDR8fGxvb3B8ZW58MHx8fHwxNzYyNDMxMDEzfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1677864234709-bde08838fb9d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDR8fGxvb3B8ZW58MHx8fHwxNzYyNDMxMDEzfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="The rewrite dilemma in software engineering"><p>Rewriting software is a topic that sparks endless debates among engineers. The first reaction when joining an existing project is often: &#x201C;This is a mess, let&#x2019;s start fresh&#x201D;. It&#x2019;s tempting to imagine a perfect, clean system - elegant architecture, fewer compromises, faster development.</p><p>Sometimes a rewrite is justified. But what&#x2019;s often overlooked are the small fixes, edge case patches, and tweaks accumulated over time. That &#x201C;messy&#x201D; system is often stable because of these hard-earned adjustments.</p><p>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.</p><p>The key is balance. Rewrites aren&#x2019;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.</p><p>Don&#x2019;t chase perfection blindly - sometimes improving what works is smarter than starting over.</p><p>Happy coding!</p>]]></content:encoded></item><item><title><![CDATA[T-Shaped engineers: the blueprint for building with AI]]></title><description><![CDATA[As AI transforms how we build software, the T-shaped engineer has become essential. With broad technical fluency and deep domain expertise, these engineers bridge human judgment and AI capabilities—building faster, safer, and smarter systems.]]></description><link>https://www.paleblueapps.com/rockandnull/t-shaped-engineer-ai-era/</link><guid isPermaLink="false">68fa34949adfc80001909325</guid><category><![CDATA[Thoughts]]></category><category><![CDATA[Software engineering]]></category><dc:creator><![CDATA[Mike Yerou]]></dc:creator><pubDate>Thu, 23 Oct 2025 14:11:21 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1520641147456-f78b3e1d83b6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDR8fFR8ZW58MHx8fHwxNzYxMjI4NDMyfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1520641147456-f78b3e1d83b6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDR8fFR8ZW58MHx8fHwxNzYxMjI4NDMyfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="T-Shaped engineers: the blueprint for building with AI"><p>The concept of the T-shaped engineer isn&apos;t new. It&apos;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 &quot;nice to have&quot; to essential.</p><h2 id="what-makes-an-engineer-t-shaped">What Makes an Engineer T-Shaped?</h2><p>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.</p><p>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&apos;re not experts in everything.</p><h2 id="the-ai-amplification-effect">The AI Amplification Effect</h2><p>Here&apos;s where the AI era changes everything.</p><p>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&apos;t touched in years, generate infrastructure-as-code configurations, or even implement features in unfamiliar frameworks.</p><p><strong>The breadth of the T becomes supercharged.</strong>&#xA0;That conversational knowledge of various domains? It&apos;s now enough to effectively direct AI tools to produce working solutions across technologies you don&apos;t use daily.</p><p>But here&apos;s the critical insight:&#xA0;<strong>AI is a powerful accelerator, but it&apos;s not infallible.</strong></p><h2 id="depth-as-the-safety-net">Depth as the Safety Net</h2><p>This is where the depth of the T becomes your organization&apos;s safety net and quality standard.</p><p>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&apos;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.</p><p>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.</p><h2 id="growing-t-shaped-engineers">Growing T-Shaped Engineers</h2><p>Becoming T-shaped isn&apos;t about forcing engineers to master everything. It&apos;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.</p><p>The engineers who will define the next decade aren&apos;t those who can do everything or those who know only one thing. They&apos;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.</p><p>The T-shaped engineer isn&apos;t just relevant in the AI era. It&apos;s the blueprint for how exceptional engineers will work.</p>]]></content:encoded></item></channel></rss>