<?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>Forem: Petr Jahoda</title>
    <description>The latest articles on Forem by Petr Jahoda (@petr_jahoda_60293bc6325fb).</description>
    <link>https://forem.com/petr_jahoda_60293bc6325fb</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3705753%2F8db0c196-b006-4677-b479-0035f8f38052.png</url>
      <title>Forem: Petr Jahoda</title>
      <link>https://forem.com/petr_jahoda_60293bc6325fb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/petr_jahoda_60293bc6325fb"/>
    <language>en</language>
    <item>
      <title>How much does it take to “finish” an app</title>
      <dc:creator>Petr Jahoda</dc:creator>
      <pubDate>Wed, 04 Feb 2026 15:30:55 +0000</pubDate>
      <link>https://forem.com/petr_jahoda_60293bc6325fb/how-much-does-it-take-to-finish-an-app-309h</link>
      <guid>https://forem.com/petr_jahoda_60293bc6325fb/how-much-does-it-take-to-finish-an-app-309h</guid>
      <description>&lt;p&gt;Quite strange equation, don’t you think? But in a developer’s world, math works in unexpected ways.&lt;/p&gt;

&lt;p&gt;Six months ago, I decided to build the best EPUB reader for Apple devices. I started immediately and, in four months, I had a working prototype with about 90% of the functionality. Everything worked as expected. Without fear, I launched my first TestFlight.&lt;/p&gt;

&lt;p&gt;I expected anything and everything, but not this: I slid back to 10% done.&lt;/p&gt;

&lt;p&gt;Somewhere in 2025, I watched Sean Allen’s video on the “90/90 rule.” Now I truly know, what that second 90% means.&lt;/p&gt;

&lt;p&gt;TestFlight revealed two truths to me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developers are always wrong&lt;/li&gt;
&lt;li&gt;When you think you’re almost done, you’ve barely started&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These two things forced me to rethink the app’s internals, design, and UI.&lt;/p&gt;

&lt;p&gt;I spent the last two to three weeks working harder than in the previous four months. I spent nights fixing bugs, unifying the interface, working on promised features, and making sure, that basics are there (like a consistent close button: top-right X, always).&lt;/p&gt;

&lt;p&gt;And even now, I’m not “finished.”&lt;/p&gt;

&lt;p&gt;Since this series is about &lt;a href="https://justread.app" rel="noopener noreferrer"&gt;justRead.app&lt;/a&gt; development, here’s the latest state with tech details.&lt;/p&gt;

&lt;h1&gt;
  
  
  What was fixed
&lt;/h1&gt;

&lt;p&gt;The killer problem was simple: the app was freezing and crashing. Something I didn’t experience in development, something TestFlight users experienced a lot.&lt;/p&gt;

&lt;p&gt;justRead.app loads epub files from the cloud, often buried deep in subfolders (not yet downloaded). When folder with books is selected, it ran three heavy processes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Analyze all the (sub)directories for epub files (no files downloaded)&lt;/li&gt;
&lt;li&gt;Extract thumbnails and some accessible data from those files (still no files downloaded)&lt;/li&gt;
&lt;li&gt;Parse metadata (downloading of files starts now)
Users saw a “frozen” app, they tried everything, then app then crashed. What was worse: on relaunch with a selected library, it repeated the exact same cycle with the exact same result for user.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  The fix:
&lt;/h1&gt;

&lt;p&gt;The app is running the same processes, but now in the background with clear user progress indicators. Users can read downloaded books while those three processes are running. Simple and completely avoided with better testing.&lt;/p&gt;

&lt;p&gt;Smaller bugs got fixed too: streak calculations, read-time tracking, bookmark saves.&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%2F8jp6w9wh15usgd1tu21m.webp" 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%2F8jp6w9wh15usgd1tu21m.webp" alt="Loading of books" width="800" height="798"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  What was changed
&lt;/h1&gt;

&lt;p&gt;Non-crashing users gave me around 20 ideas like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tap anywhere on a book row to open it (not just the cover)&lt;/li&gt;
&lt;li&gt;Hide settings on book start&lt;/li&gt;
&lt;li&gt;Load font manually from menu, not automatically from folder&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I experimented with all the ideas, iterated on users feedback and implemented what was the best fit.&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%2Frntt9c8io21hlgk6n9ju.webp" 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%2Frntt9c8io21hlgk6n9ju.webp" alt="Settings and external font loading." width="800" height="798"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  What was added
&lt;/h1&gt;

&lt;p&gt;No breakage risk here. Those were added:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Statistics dashboard&lt;/li&gt;
&lt;li&gt;Roadmap with user voting&lt;/li&gt;
&lt;li&gt;Alphabet jump bar for libraries&lt;/li&gt;
&lt;li&gt;Extra settings tweaks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Plus about 50 other small things, like highlighting your current TOC chapter.&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%2Fytcmd04p3gq4ydn69nfw.webp" 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%2Fytcmd04p3gq4ydn69nfw.webp" alt="Statistics (still in beta) with reading streak." width="800" height="798"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  TestFlight #2
&lt;/h1&gt;

&lt;p&gt;It’s live today.&lt;br&gt;
This time, I’m expecting crashes, freezes, and issues.&lt;/p&gt;

&lt;h1&gt;
  
  
  As a user, why is this all important?
&lt;/h1&gt;

&lt;p&gt;You want polished apps, no crashes, intuitive user interface. You are expecting a developer who cares about the app, because he uses it.&lt;/p&gt;

&lt;p&gt;That’s why TestFlight matters. Apple enables it, testers refine the app and the users get app as polished as possible.&lt;/p&gt;

&lt;p&gt;The voting roadmap builds on this: you shape justRead.app’s future, prioritizing what you want.&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%2Foibl15mutoddofbv0ndp.webp" 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%2Foibl15mutoddofbv0ndp.webp" alt="justRead.app roadmap with voting and commenting." width="800" height="798"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  As a developer, why is this all important?
&lt;/h1&gt;

&lt;p&gt;We build apps and systems because we love to.&lt;/p&gt;

&lt;p&gt;Sean’s rule reminds us: the final 90% polish is the app.&lt;/p&gt;

&lt;p&gt;Rush development and release, and you ship a prototype.&lt;/p&gt;

&lt;p&gt;Deliver the app polished, and you create something users love.&lt;/p&gt;

&lt;p&gt;That’s why 90% + 90 % makes 100%.&lt;/p&gt;

&lt;p&gt;And to answer the question in the beginning: it does take a lot more than what you have planned. Even if you have years of experience in development.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://justread.app" rel="noopener noreferrer"&gt;justRead.app&lt;/a&gt; is an epub reader for iPhone, currently in TestFlight.&lt;/em&gt;_&lt;br&gt;
Peter&lt;br&gt;
Reader, Developer, justRead.app Creator&lt;/p&gt;

</description>
      <category>programming</category>
      <category>development</category>
      <category>ios</category>
      <category>mobile</category>
    </item>
    <item>
      <title>30 Days of Sauna: The Sleep Hack That Made Me a Better Developer</title>
      <dc:creator>Petr Jahoda</dc:creator>
      <pubDate>Mon, 26 Jan 2026 08:50:53 +0000</pubDate>
      <link>https://forem.com/petr_jahoda_60293bc6325fb/30-days-of-sauna-the-sleep-hack-that-made-me-a-better-developer-abh</link>
      <guid>https://forem.com/petr_jahoda_60293bc6325fb/30-days-of-sauna-the-sleep-hack-that-made-me-a-better-developer-abh</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Why Daily Sauna Is the Best Productivity Tool I Never Expected&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As a developer, I optimize everything: code, workflows, deploy times. But I’d neglected the most important system: my own brain.&lt;/p&gt;

&lt;p&gt;Two years ago, I spent two days on and off in a Finnish sauna and felt relieved like never before — a complete nervous system reset. I knew I needed this regularly, so I decided to build my own Finnish sauna. It took me two years.&lt;/p&gt;

&lt;p&gt;Why? Because I was deep in coding, building justRead and other projects, with no time to spare. Now I regret I didn’t finish it in two weeks.&lt;/p&gt;

&lt;p&gt;On December 22, 2025, with sauna finally finished, I committed to daily sauna for 30 days. Not for fitness, but as an experiment in cognitive recovery and mental “garbage collection.” I wanted to know if deliberate heat exposure could help me think more clearly, switch contexts faster, and actually shut down after work instead of never-ending thinking until midnight.&lt;/p&gt;

&lt;p&gt;What I discovered surprised me. My sleep changed first, then my focus, and only later my stress baseline. And once I dug into the neuroscience of heat stress, blood flow, and endorphins, the science backed up what I was feeling in real life.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you’re a developer stuck in burnout loops, poor sleep, or creative drought: read on.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This might be the recovery protocol you’ve been missing.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the story of that 30-day experiment, what worked, what didn’t, and how sauna quietly rewired the way I build, think, and recover as a developer.&lt;/p&gt;

&lt;h1&gt;
  
  
  The problem: developer brain decay
&lt;/h1&gt;

&lt;p&gt;I was caught in a pattern most developers recognize. Deep whole day focus sessions draining me by 6 PM.&lt;br&gt;
Fractured sleep, waking three, four times a night, thoughts spiraling.&lt;br&gt;
Brain fog thick enough that fresh ideas felt impossible ( I was caught in non stop solving problems).&lt;/p&gt;

&lt;p&gt;I’d notice problems but react with anxiety instead of clarity.&lt;/p&gt;

&lt;p&gt;Recovery wasn’t happening. Each day started where the previous one ended.&lt;/p&gt;

&lt;h1&gt;
  
  
  The 30-day experiment
&lt;/h1&gt;

&lt;p&gt;Daily routine: 2×15 minutes in sauna (90°C), separated by cold exposure. Plus the minutes before and after.&lt;/p&gt;

&lt;p&gt;About one hour completely offline.&lt;/p&gt;

&lt;p&gt;Simple. Consistent. Measurable.&lt;/p&gt;

&lt;h1&gt;
  
  
  What changed (the good)
&lt;/h1&gt;

&lt;p&gt;Sleep quality improved dramatically. I now sleep 8+ hours straight with no, or little, interruptions. My Apple Watch confirms: 90%+ sleep quality, nearly every night. For last 30 days I got 99% five times. I know, not much, but this was impossible for me before, for a whole year. This alone is significant. Sleep deprivation compounds: lack of sleep erodes decision making, impulse control, and the ability to do sustained cognitive work.&lt;/p&gt;

&lt;p&gt;Better sleep is better code.&lt;/p&gt;

&lt;p&gt;I can work productively until 9 PM and wake fresh. I used to hit a wall around 6 PM, depleted and fried. Now I extend into the evening without the characteristic burnout feeling. Next morning, I don’t feel the accumulated exhaustion.&lt;/p&gt;

&lt;p&gt;It’s real recovery, not willpower.&lt;/p&gt;

&lt;p&gt;My default nervous system state shifted. I’m naturally high-strung. Overreactive. Small obstacles triggered disproportionate stress. Now when something breaks — a bug, a business complication — I notice it, acknowledge it, and move forward calmly. &lt;strong&gt;This is the biggest change for me.&lt;/strong&gt; Calm.&lt;/p&gt;

&lt;p&gt;You think more clearly under calm.&lt;/p&gt;

&lt;p&gt;Ideas flow. &lt;strong&gt;Second most valuable change&lt;/strong&gt;: I get problem-solving ideas while in the sauna. New ideas about justRead, the project I am working on, architecture decisions, feature approaches, how to solve this and that. Before, I was stuck in execution mode. Now, my brain regenerates creative capacity. I do my daily tasks better and faster and have time for thinking.&lt;/p&gt;

&lt;p&gt;This is what cognitive recovery actually looks like.&lt;/p&gt;

&lt;p&gt;Joint pain vanished. I have a healed broken ankle and a past elbow injury. Both would ache, especially with stress or fatigue. Or weather. For 30 days, they’ve been silent. I stopped noticing them entirely.&lt;/p&gt;

&lt;p&gt;The electronics-off hour matters. I’m around computers 10+ hours daily. That hour of pure heat, no screens, no input: it’s not meditation.&lt;/p&gt;

&lt;p&gt;It’s your nervous system resetting.&lt;/p&gt;

&lt;h1&gt;
  
  
  The bad: teenage acne at 46
&lt;/h1&gt;

&lt;p&gt;For three weeks, my face erupted like in puberty. Acne everywhere. At 46, I looked 16 again. Heat stress + detox purging sebum buildup. Week 4, skin started clearing. Worth it? Yes. But prepare for the mirror shock.&lt;/p&gt;

&lt;p&gt;My 17 years old daughter refused to go in, when she was seeing me for those three weeks.&lt;/p&gt;

&lt;h1&gt;
  
  
  Why sauna beats other recovery methods
&lt;/h1&gt;

&lt;p&gt;I’ve tried them all: meditation, walking, music, running, you name it.&lt;/p&gt;

&lt;p&gt;The problem? My brain still stayed on. Work problems, bugs, architecture decisions: they followed me. Even with “free time,” I was mentally working.&lt;/p&gt;

&lt;p&gt;Sauna is different. The heat demands 100% attention. You can’t think about SwiftUI bindings when your core temperature is 39°C. Your nervous system hijacks control. Work disappears. For the first time, my brain actually shuts down. Why? I don’t know. But it works.&lt;/p&gt;

&lt;h1&gt;
  
  
  The science
&lt;/h1&gt;

&lt;p&gt;All of this written above isn’t placebo. Recent neuroscience research on sauna bathing shows measurable cognitive shifts.&lt;/p&gt;

&lt;p&gt;Brain wave patterns change. EEG studies show increased theta and alpha power post-sauna — the same patterns associated with clarity and emotional processing. Your brain becomes more efficient; it uses fewer attentional resources to process the same information.​&lt;/p&gt;

&lt;p&gt;Stress hormones drop. Heart rate decreases significantly post-sauna. Cortisol (stress hormone) reduces in regular users. Your nervous system downshifts into parasympathetic activation — the recovery state.​&lt;/p&gt;

&lt;p&gt;Cognitive processing speeds up. Reaction times improve measurably after sauna. Your pre-attentive auditory processing (how your brain filters relevant signals) becomes sharper. More signal, less noise.​&lt;/p&gt;

&lt;p&gt;Sleep architecture improves. Heat exposure triggers melatonin regulation and creates a core temperature drop that signals sleep onset. The evidence is clear: sauna users report significantly better sleep quality.​&lt;/p&gt;

&lt;h1&gt;
  
  
  Why this matters for developers
&lt;/h1&gt;

&lt;p&gt;We optimize our tools. We rarely optimize recovery.&lt;/p&gt;

&lt;p&gt;A developer’s output isn’t measured in hours worked. It’s measured in decision quality, code clarity, and sustained focus. All three degrade under chronic stress and poor sleep.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sauna maybe isn’t a productivity hack, like promised in the title.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It’s infrastructure repair.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you’re experiencing burnout, fragmented sleep, reactivity masquerading as decisiveness, or creative drought: 30 days of daily sauna might reset you the way it reset me.&lt;/p&gt;

&lt;p&gt;The barrier is consistency. There’s no sauna in most offices. Most of us don’t have one at home. It requires commitment: showing up daily, staying the full duration, tolerating discomfort.&lt;/p&gt;

&lt;p&gt;But the return on that commitment is significant: sleep, calm, ideas, and the capacity to work without depletion.&lt;/p&gt;

&lt;h1&gt;
  
  
  Is this all?
&lt;/h1&gt;

&lt;p&gt;I’m continuing. At day 60 and day 90, I’ll measure what else emerges, because research says that most changes occurs at the end of third month. Long-term effects, the compound advantages of three months of daily recovery.&lt;/p&gt;

&lt;p&gt;If you build software and you’re not recovering properly, sauna is worth testing.&lt;/p&gt;

&lt;p&gt;And if you’re looking for an app that respects your reading time and gives you offline-first focus? justRead is designed for people who understand the value of deep, undistracted engagement with text. Same principle: clear the noise, reclaim your attention.&lt;/p&gt;

&lt;p&gt;Peter&lt;br&gt;
Reader, Developer, &lt;a href="https://justread.app" rel="noopener noreferrer"&gt;justRead&lt;/a&gt; Creator&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Sleep Quality
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://sauna.fi/en/sauna-knowledge/sauna-and-sleep/" rel="noopener noreferrer"&gt;https://sauna.fi/en/sauna-knowledge/sauna-and-sleep/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.saunafin.com/blog/can-sauna-improve-my-sleep-quality/" rel="noopener noreferrer"&gt;https://www.saunafin.com/blog/can-sauna-improve-my-sleep-quality/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Stress &amp;amp; Calm (Cortisol Reduction)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://digital.car.chula.ac.th/clmjournal/vol57/iss1/4/" rel="noopener noreferrer"&gt;https://digital.car.chula.ac.th/clmjournal/vol57/iss1/4/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.r1se.co.uk/blog/turn-up-the-heat" rel="noopener noreferrer"&gt;https://www.r1se.co.uk/blog/turn-up-the-heat&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.salussaunas.com/blogs/blog/why-saunas-are-an-effective-tool-for-lowering-stress-hormones" rel="noopener noreferrer"&gt;https://www.salussaunas.com/blogs/blog/why-saunas-are-an-effective-tool-for-lowering-stress-hormones&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Brain Clarity &amp;amp; Ideas
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.greatbayspas.com/blog/the-science-of-relaxation-how-hot-tubs-and-saunas-affect-your-brain/" rel="noopener noreferrer"&gt;https://www.greatbayspas.com/blog/the-science-of-relaxation-how-hot-tubs-and-saunas-affect-your-brain/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.hightechhealth.com/infrared-saunas-fight-brain-fog/" rel="noopener noreferrer"&gt;https://www.hightechhealth.com/infrared-saunas-fight-brain-fog/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://destinationdeluxe.com/benefits-of-sauna-for-brain-health/" rel="noopener noreferrer"&gt;https://destinationdeluxe.com/benefits-of-sauna-for-brain-health/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Cognitive Decline &amp;amp; Dementia
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://academic.oup.com/ageing/article/46/2/245/2654230" rel="noopener noreferrer"&gt;https://academic.oup.com/ageing/article/46/2/245/2654230&lt;/a&gt;&lt;br&gt;
&lt;a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC7560162/" rel="noopener noreferrer"&gt;https://pmc.ncbi.nlm.nih.gov/articles/PMC7560162/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Joint/Pain &amp;amp; Flexibility
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://digital.car.chula.ac.th/clmjournal/vol57/iss1/4/" rel="noopener noreferrer"&gt;https://digital.car.chula.ac.th/clmjournal/vol57/iss1/4/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  General Research &amp;amp; Happiness
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://medicalxpress.com/news/2024-11-sauna-users-happier-swedish.html" rel="noopener noreferrer"&gt;https://medicalxpress.com/news/2024-11-sauna-users-happier-swedish.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>development</category>
    </item>
    <item>
      <title>When Your App Freezes in Front of Your Testers: What I Learned About Ego &amp; iOS Development</title>
      <dc:creator>Petr Jahoda</dc:creator>
      <pubDate>Sun, 25 Jan 2026 08:11:56 +0000</pubDate>
      <link>https://forem.com/petr_jahoda_60293bc6325fb/when-your-app-freezes-in-front-of-your-testers-what-i-learned-about-ego-ios-development-424i</link>
      <guid>https://forem.com/petr_jahoda_60293bc6325fb/when-your-app-freezes-in-front-of-your-testers-what-i-learned-about-ego-ios-development-424i</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Development of justRead app in six parts; part five.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’ve been building software for almost 15 years. Manufacturing systems, backend services, databases that handle millions of transactions. Things that actually matter, production lines depend on them. I thought I knew what I was doing.&lt;/p&gt;

&lt;p&gt;Then I shipped my first TestFlight, and my app crashed for 50% of my testers.&lt;/p&gt;

&lt;h1&gt;
  
  
  The confidence trap
&lt;/h1&gt;

&lt;p&gt;When you’ve spent a decade and a half solving hard problems, you develop a certain… confidence. Not arrogance, exactly. Just the quiet assumption that you understand your domain. You’ve debugged memory leaks in enterprise systems. You’ve optimized database queries for millions of records. You’ve shipped products to paying customers who depended on your code.&lt;/p&gt;

&lt;p&gt;Building a native iOS app in SwiftUI felt manageable by comparison. Smaller scope. Single platform. Modern tooling. Surely the hard parts were the product design and the business strategy, not the code.&lt;/p&gt;

&lt;p&gt;So when I invited 157 testers to try justRead, my e-book reader app, I was genuinely unprepared for what came next.&lt;/p&gt;

&lt;h1&gt;
  
  
  The day everything broke
&lt;/h1&gt;

&lt;p&gt;The numbers seemed reasonable at first:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;157 people applied for TestFlight&lt;/li&gt;
&lt;li&gt;88 actually run the TestFlight&lt;/li&gt;
&lt;li&gt;4 unsubscribed immediately (missing features they wanted)&lt;/li&gt;
&lt;li&gt;84 stayed and used TestFlight&lt;/li&gt;
&lt;li&gt;10–15 engaged deeply with feedback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What I wasn’t ready for: approximately 50% of those users experienced crashes and freezes. Not occasionally. Repeatedly.&lt;/p&gt;

&lt;p&gt;The feedback came in waves on the first day. “App froze.” “Crashed when I opened a book.” “Keeps crashing during search.” “Freezes and won’t respond.”&lt;/p&gt;

&lt;p&gt;I felt it immediately: shame &amp;amp; embarrassment. That specific kind of ego hit you get when you assumed you were competent and the evidence suggests otherwise.&lt;/p&gt;

&lt;p&gt;My first instinct was to fix it immediately. I pushed four quick builds in rapid succession, each targeting what I thought were the culprits. Each time I was convinced I’d found it. Each time, I learned I hadn’t.&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%2F7kp3biy5vqu1hd75uga9.webp" 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%2F7kp3biy5vqu1hd75uga9.webp" alt="progress in informing user" width="800" height="811"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  The problem I didn’t expect
&lt;/h1&gt;

&lt;p&gt;I totally not anticipated: the app was trying to download data from cloud storage to local iPhone storage in the background while users were trying to interact with it. The process wasn’t properly managed. It wasn’t being cancelled. It wasn’t communicating with the UI that it was happening.&lt;/p&gt;

&lt;p&gt;The result? The app would freeze while syncing. Then crash when users tried to do anything else.&lt;/p&gt;

&lt;p&gt;This is a foundational problem. Not a bug. A design oversight. And it required rethinking how the entire cloud-sync system works.&lt;/p&gt;

&lt;p&gt;That’s not fixed in a quick build. That’s fixed in the next major revision: the one I’m working on now, scheduled for next week.&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%2F4ng0tppvtzfztqq57ji7.webp" 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%2F4ng0tppvtzfztqq57ji7.webp" alt="splash screen" width="800" height="811"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Why this mattered more than I expected
&lt;/h1&gt;

&lt;p&gt;I wrote the post-TestFlight email to my testers laying out exactly what we found, exactly what we’re fixing. It’s detailed. 27 separate items across stability fixes, functional improvements, experience enhancements, and new features.&lt;/p&gt;

&lt;p&gt;When I look at that list, I feel two things simultaneously:&lt;br&gt;
(1) genuine gratitude that TestFlight caught these problems before actual users did, and …&lt;br&gt;
(2) the uncomfortable knowledge that I shipped something to real people that wasn’t ready.&lt;/p&gt;

&lt;p&gt;But this thing hit harder than the crashes themselves: I wasn’t expecting problems in the first place.&lt;/p&gt;

&lt;p&gt;Not intellectually. Obviously, you expect problems when you’re building in public and testing. That’s the point of TestFlight.&lt;/p&gt;

&lt;p&gt;But emotionally? I thought I knew what I was doing. My experience did translate — to the architectural thinking, the debugging methodology, the understanding that stability matters. But it didn’t translate to the specifics of how iOS manages background tasks, memory pressure, and network state. That requires learning deeply iOS, not just applying general software engineering. I thought the hard parts would be the things I expected them to be, not the foundational infrastructure that I’d glossed over.&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%2Fhta1dp7mu1hve8z600w2.webp" 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%2Fhta1dp7mu1hve8z600w2.webp" alt="settings" width="800" height="814"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  The humility reboot
&lt;/h1&gt;

&lt;p&gt;Every developer who’s shipped something meaningful knows this feeling: the moment your assumptions collide with reality. It’s not special. It’s not even novel. Thousands of indie developers ship broken first versions to TestFlight every week.&lt;br&gt;
What is interesting is that I didn’t see it coming, even though I should have.&lt;/p&gt;

&lt;p&gt;I think it’s because there’s a category error in how we talk about indie app development. The content I read before shipping was almost entirely about growth metrics, monetization strategy, App Store Optimization, and how to build profitable businesses. Very little about the actual problem-solving journey. Very little about the moment when your code meets real devices, real networks, real edge cases, and fails spectacularly.&lt;/p&gt;

&lt;p&gt;Everyone talks about MRR and unit economics and customer acquisition cost. Almost nobody talks about the humbling moment when you realize your search implementation is leaking memory, or your cloud-sync strategy is fundamentally broken, or your assumptions about how iOS handles background tasks were incomplete.&lt;/p&gt;

&lt;p&gt;So I wasn’t prepared for the specific ways iOS exposes stability problems: background task lifecycle, memory pressure, network interruption, concurrent file access. I knew stability mattered. I didn’t anticipate how differently it manifests.&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%2F8156prz47c7qz64vja24.webp" 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%2F8156prz47c7qz64vja24.webp" alt="what is coming" width="800" height="812"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  What I know now (that I didn’t know last week)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Confidence and competence are not the same thing.
&lt;/h2&gt;

&lt;p&gt;I’ve built complex systems. I understand databases, performance optimization, distributed systems. But iOS development operates by different rules. Memory management is different. Concurrency is different. The operating system’s lifecycle management is different. And my 15 years of experience didn’t automagically transfer to these domains.&lt;br&gt;
The apps that freeze on 50% of devices aren’t built by incompetent people. They’re built by people who didn’t anticipate the specific, non-obvious ways that iOS handles background tasks, network requests, and memory pressure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing on the simulator is not the same as testing on real devices.
&lt;/h2&gt;

&lt;p&gt;I tested extensively. On the simulator. On my own devices. But real users with different network speeds, device generations, cloud storage providers, and actual reading patterns found problems in 48 hours that I didn’t find in months.&lt;br&gt;
The testers weren’t doing anything wrong. They were using the app the way it’s supposed to be used. And that’s exactly when the problems appeared.&lt;/p&gt;

&lt;h2&gt;
  
  
  The gap between “it works for me” and “it works” is massive.
&lt;/h2&gt;

&lt;p&gt;This is obvious when you say it out loud. But it was a genuine surprise living through it. My devices are development machines. They have good connectivity, fresh iOS versions, ample memory. Real users have older iPhones running older iOS versions on spotty WiFi networks while the app is trying to download a 500MB library from cloud storage.&lt;br&gt;
The problem wasn’t the code. The problem was that the code had never met these conditions before.&lt;/p&gt;

&lt;h2&gt;
  
  
  Freezes and crashes are not small bugs. They’re design problems.
&lt;/h2&gt;

&lt;p&gt;I initially approached the crashes as debugging exercises. Find the null pointer. Find the memory leak. Find the race condition. But the core issue was architectural: my app’s approach to cloud sync didn’t account for the reality that syncing might take a long time, might fail, might be interrupted, and the UI should probably tell the user what’s happening instead of just freezing.&lt;/p&gt;

&lt;p&gt;That’s not a bug fix. That’s a redesign.&lt;/p&gt;

&lt;h1&gt;
  
  
  The week ahead
&lt;/h1&gt;

&lt;p&gt;I’m rebuilding the cloud-sync system from the ground. I’m adding proper error handling, user notifications, timeout mechanisms, and background task management. I’m making sure the app doesn’t try to open files that haven’t finished downloading. I’m creating feedback loops so users know what’s happening instead of wondering why their app is frozen.&lt;/p&gt;

&lt;p&gt;The new build goes to TestFlight next week.&lt;/p&gt;

&lt;p&gt;And I have to admit that I’m nervous about it. Not because I think there will still be crashes (I’m 100% confident there won’t be, and yes, I know what that overconfidence sounds like now). But because I’ve learned that my confidence is not a reliable predictor of reality.&lt;/p&gt;

&lt;p&gt;The 84 people who stuck with the app deserve a product that works. The 10–15 who gave detailed feedback deserve to know that their investment of time was the thing that made the difference between shipping something broken and shipping something real.&lt;/p&gt;

&lt;h1&gt;
  
  
  The thing nobody writes about
&lt;/h1&gt;

&lt;p&gt;This is why I’m writing this. Not to tell you that my app is great (it’s not, yet). Not to tell you about my growth metrics or my monetization strategy (I have neither, we’re literally in TestFlight week one). And not to tell you that building an indie app is easy if you follow these ten steps.&lt;/p&gt;

&lt;p&gt;I’m writing this because the indie dev content I read before shipping was almost entirely about the business side, the metrics, the strategy and the market opportunity. Almost none of it was about the moment when you realize that iOS stability requires entirely different thinking than backend systems. That managing cloud sync while the OS kills background tasks while the user is on spotty WiFi requires architectural decisions, not just debugging. Stability as a principle? Everyone knows that. Stability as iOS execution? That’s what nobody talks about.&lt;/p&gt;

&lt;p&gt;Almost none of it was about the feeling of shipping something to real people and having it fail for half of them, even though you thought you knew what you were doing.&lt;/p&gt;

&lt;p&gt;Almost none of it was about the humility that comes from learning, in real time, why your confidence was misplaced.&lt;/p&gt;

&lt;p&gt;And maybe that’s because those stories are harder to write. They require admitting that despite 15 years of experience, despite months of development, despite testing that felt comprehensive, you still got something fundamentally wrong.&lt;/p&gt;

&lt;p&gt;But they’re also the stories that matter most, because they’re the ones that prepare you for what actually happens when you ship.&lt;/p&gt;

&lt;h1&gt;
  
  
  What comes next
&lt;/h1&gt;

&lt;p&gt;For justRead: a rebuilt cloud-sync system, more thorough testing with real devices, and a deep respect for what I still have to learn about iOS development.&lt;/p&gt;

&lt;p&gt;For this journey: continued transparency about what works and what doesn’t. Continued gratitude for the 84 testers who are willing to help us figure this out. And continued proof that the hard part of building an app isn’t the idea or the design, it’s the relentless, humbling work of making it actually work.&lt;/p&gt;

&lt;p&gt;The next TestFlight build will be better. And I’ll be more honest about what “better” actually means: not that we fixed everything, but that we learned something.&lt;/p&gt;

&lt;p&gt;That’s progress, even if it doesn’t feel like it when your app is freezing in front of real people.&lt;br&gt;
justRead is an EPUB reader for iPhone, currently in TestFlight. If you’re interested in early access or want to share your own story of shipped-too-early products, I’d love to hear from you. The next build ships next week.&lt;/p&gt;

&lt;p&gt;Peter&lt;br&gt;
Reader, Developer, &lt;a href="https://justread.app" rel="noopener noreferrer"&gt;justRead&lt;/a&gt; Creator&lt;/p&gt;

</description>
      <category>development</category>
      <category>testing</category>
      <category>ios</category>
      <category>lesson</category>
    </item>
    <item>
      <title>Why most apps feel broken (and why justRead is different)</title>
      <dc:creator>Petr Jahoda</dc:creator>
      <pubDate>Thu, 22 Jan 2026 10:47:30 +0000</pubDate>
      <link>https://forem.com/petr_jahoda_60293bc6325fb/why-most-apps-feel-broken-and-why-justread-is-different-1jge</link>
      <guid>https://forem.com/petr_jahoda_60293bc6325fb/why-most-apps-feel-broken-and-why-justread-is-different-1jge</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Development of justRead app in six parts; part four.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The elephant in the room
&lt;/h2&gt;

&lt;p&gt;You’ve probably felt it. That moment when you download an app that looks beautiful but feels wrong. &lt;a href="https://thisisglance.com/blog/why-90-of-users-abandon-apps-during-onboarding-process" rel="noopener noreferrer"&gt;The onboarding is confusing&lt;/a&gt;. Navigation is buried three taps deep. Performance stutters when you expect smoothness. The developer clearly built the app for themselves, not for you.&lt;/p&gt;

&lt;p&gt;According to research, &lt;a href="https://www.moveoapps.com/blog/the-hidden-cost-of-poor-ux-how-bad-user-experience-kills-retention-and-revenue/" rel="noopener noreferrer"&gt;68% of users will switch to a competitor after just one poor experience&lt;/a&gt;.&lt;br&gt;
Another study found &lt;a href="https://uxcam.com/blog/ux-statistics/" rel="noopener noreferrer"&gt;88% of users abandon apps due to bad UX alone&lt;/a&gt; — not because they lack features, but because they feel poorly made.&lt;/p&gt;

&lt;p&gt;What’s striking is that this isn’t accidental. It’s a symptom of how most apps are built: from the inside out. Developers ship features without asking if users actually want them. They guess at what “polish” means instead of asking or following guidelines. They update mysteriously, leaving users confused about what changed or why.&lt;/p&gt;

&lt;p&gt;Most apps are made at users, not for them. And users notice.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 15-year perspective
&lt;/h2&gt;

&lt;p&gt;I’ve spent 15 years building software, and the last decade focusing obsessively on user experience. I’ve watched talented developers ship broken apps. Not technically broken — but broken in the ways that matter: confusing navigation, invisible affordances, missing the small details that make something feel intentional versus accidental — ever experienced misaligned icons?&lt;/p&gt;

&lt;p&gt;And the worst part? Many developers don’t ask what’s broken and what the app needs. They release updates in silence. Users guess why something changed. Features land that nobody wanted. Features people asked for never ship.&lt;/p&gt;

&lt;p&gt;Meanwhile, I’m also a lifetime reader. I’ve used every EPUB reader on iOS. I’ve felt the frustration — smooth scrolling that isn’t, fonts that don’t render properly, library management that feels like an afterthought, features that exist but feel bolted on.&lt;/p&gt;

&lt;p&gt;It became clear: the apps that survive are built by people who deeply understand both craft and empathy.&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%2F45t6oup1m6dvikkc7nul.webp" 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%2F45t6oup1m6dvikkc7nul.webp" alt="xcode" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: apps without voices
&lt;/h2&gt;

&lt;p&gt;Here’s what most apps do wrong: they assume users can read minds.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You download an app. It’s pretty. But then:&lt;/li&gt;
&lt;li&gt;You have an idea for a feature&lt;/li&gt;
&lt;li&gt;You email support (if there even is one)&lt;/li&gt;
&lt;li&gt;You never hear back&lt;/li&gt;
&lt;li&gt;Months later, a mysterious update arrives&lt;/li&gt;
&lt;li&gt;You have no idea if it addressed your feedback or ignored it&lt;/li&gt;
&lt;li&gt;You uninstall&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This happens because there’s no conversation. The developer is building in a vacuum. Users are waiting in the dark.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://360magazine.com/2021/07/27/cisco-appdynamics-app-attention-index/" rel="noopener noreferrer"&gt;72% of users say they expect regular feature updates as extremely important or very important&lt;/a&gt;. But most apps provide zero visibility into what’s coming next. Not a roadmap. Not a hint. Just silence, then surprise.&lt;/p&gt;

&lt;p&gt;This erodes trust. And once trust is gone, so are you.&lt;/p&gt;

&lt;h2&gt;
  
  
  The better way: an in-app roadmap where users vote
&lt;/h2&gt;

&lt;p&gt;This is where justRead is different.&lt;/p&gt;

&lt;p&gt;Right in the app, you’ll find the Feature Roadmap — a living, breathing board where you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vote on features you want to see built next&lt;/li&gt;
&lt;li&gt;See exactly what’s in progress (because transparency matters)&lt;/li&gt;
&lt;li&gt;Track completed features and know your voice shaped them&lt;/li&gt;
&lt;li&gt;Comment and discuss ideas before they’re implemented&lt;/li&gt;
&lt;li&gt;Understand the “why” behind development decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn’t performative transparency. It’s not a gesture. It’s the actual mechanism by which justRead is built — using VoteFirst, a platform designed specifically for this purpose. Your votes influence what gets built. Your feedback shapes how it gets built. The roadmap updates live — you see progress in real time.&lt;/p&gt;

&lt;p&gt;Why does this matter?&lt;/p&gt;

&lt;p&gt;When users can see and influence the roadmap, something shifts: they go from being customers to being partners. Research shows users who participate in voting are significantly more likely to appreciate updates when they ship — not because the features are better, but because they see themselves in the product.&lt;br&gt;
They feel heard. And when users feel heard, they stay.&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%2F0sz7th96yiv8b3bzjihg.webp" 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%2F0sz7th96yiv8b3bzjihg.webp" alt="justread I." width="800" height="798"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Proof that polish matters
&lt;/h2&gt;

&lt;p&gt;I didn’t enter indie app development to build a mediocre reading app. I built justRead because I wanted to create something that feels intentional in every interaction.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smooth scrolling that doesn’t stutter&lt;/li&gt;
&lt;li&gt;Thoughtful font rendering that respects typography&lt;/li&gt;
&lt;li&gt;Micro-interactions that feel responsive, not delayed&lt;/li&gt;
&lt;li&gt;Consistent design language throughout (not features that feel bolted on)&lt;/li&gt;
&lt;li&gt;Performance optimization so the app doesn’t drain your battery&lt;/li&gt;
&lt;li&gt;Respecting Apple design guidelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is tedious work. No user notices these things consciously. But they feel them. An app that’s been polished feels different — lighter, faster, more trustworthy. An app that hasn’t feels like extra work.&lt;/p&gt;

&lt;p&gt;This isn’t vanity. &lt;a href="https://www.apmdigest.com/mobile-apps-launch-3-seconds" rel="noopener noreferrer"&gt;Research shows that app performance and stability directly impact how users perceive your entire brand&lt;/a&gt;. One laggy app, and users assume you’re careless everywhere. One smooth app, and they assume you care about details that matter.&lt;/p&gt;

&lt;h2&gt;
  
  
  The message to users
&lt;/h2&gt;

&lt;p&gt;If you’re a reader considering justRead, here’s what we’re offering: an app built by someone who reads, who understands what makes apps feel good, and who believes &lt;strong&gt;you should have a voice in what gets built&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You’re not downloading software. You’re joining a community where your vote matters and your feedback shapes what comes next. Features land because you asked for them, not because a product manager guessed.&lt;/p&gt;

&lt;p&gt;That’s a different kind of relationship. One where the developer is visibly, consistently working for you.&lt;/p&gt;

&lt;p&gt;Join the waitlist at &lt;a href="https://justread.app" rel="noopener noreferrer"&gt;justread.app&lt;/a&gt; and be part of this process. See the roadmap for yourself. Vote on features. Help us prove that apps can be built for readers, not at them.&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%2F5qfyzrfjrurt1gnkax16.webp" 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%2F5qfyzrfjrurt1gnkax16.webp" alt="justread II" width="800" height="807"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The message to developers
&lt;/h2&gt;

&lt;p&gt;If you’re a developer reading this, consider what justRead is doing: creating an in-app feature roadmap with user voting.&lt;/p&gt;

&lt;p&gt;Why is this a differentiator? Because most apps don’t do it. Most developers hide their roadmap (if they have one). Most users have no idea what’s being built or if their feedback matters.&lt;/p&gt;

&lt;p&gt;But users crave this transparency. It’s low-cost to build — a GitHub Project, a Notion board, or a dedicated platform like Frill, Changelogfy, or VoteFirst. The hard part isn’t the tool. It’s the commitment: showing your users you’re willing to be transparent about progress, priorities, and constraints.&lt;/p&gt;

&lt;p&gt;When users see your roadmap, they understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What you’re working on right now&lt;/li&gt;
&lt;li&gt;What’s coming next (and when)&lt;/li&gt;
&lt;li&gt;Why some features get prioritized over others&lt;/li&gt;
&lt;li&gt;That you’re actively listening&lt;/li&gt;
&lt;li&gt;This builds trust in ways that polished marketing can’t touch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s also a recruiting tool. Developers and designers are attracted to projects that care about users. Transparency says: “We’re not hiding anything. Come build with us.”&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%2Fy0p70gnqvc54v5ocdxq9.webp" 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%2Fy0p70gnqvc54v5ocdxq9.webp" alt="votefirst" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The unspoken competition
&lt;/h2&gt;

&lt;p&gt;The competition for user attention isn’t just between EPUB readers. It’s between apps that feel like they want to work for you and apps that feel like they’re tolerating your existence.&lt;/p&gt;

&lt;p&gt;Most apps fall into the latter category. They’re technically functional but emotionally cold. No voice. No relationship. No sense that a human being made thoughtful choices about every detail.&lt;/p&gt;

&lt;p&gt;The apps that win — and I mean truly win, with loyal users who evangelize them — are the ones that feel personal. That feel like someone cared enough to polish every interaction. That feel like the developer is sitting across from you, listening to what you need.&lt;/p&gt;

&lt;p&gt;That’s not a coincidence. That’s design.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next
&lt;/h2&gt;

&lt;p&gt;justRead launches with a public, in-app roadmap where you can see every feature in progress and vote on what comes next. This isn’t a “maybe someday” feature. It’s core to how we build.&lt;/p&gt;

&lt;p&gt;If you’re a reader, that means your voice matters from day one.&lt;/p&gt;

&lt;p&gt;If you’re a developer, consider: What if your users didn’t have to wonder what you’re building? What if they could see, vote, and feel ownership over your product’s direction?&lt;/p&gt;

&lt;p&gt;The difference between an app that works and an app that matters is smaller than you think. It starts with listening. It continues with transparency. And it compounds when users feel like partners instead of customers.&lt;/p&gt;

&lt;p&gt;Most apps miss this. They release in silence. They update mysteriously. They hope users stay.&lt;/p&gt;

&lt;p&gt;justRead is built differently.&lt;/p&gt;

&lt;p&gt;Your vote. Your voice. Your app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ready to join?
&lt;/h2&gt;

&lt;p&gt;If you want to be part of shaping justRead’s future — and you’ve been waiting to see what makes this app different — your moment is coming.&lt;br&gt;
→ Join the waitlist at &lt;a href="https://justread.app" rel="noopener noreferrer"&gt;justread.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Watch the roadmap. Vote on features. See your feedback become reality. Help us prove that apps can be built forreaders, not at them.&lt;/p&gt;

&lt;p&gt;P.S. If you’re a developer interested in implementing feature voting in your own app, check out &lt;a href="https://votefirst.app" rel="noopener noreferrer"&gt;VoteFirst&lt;/a&gt; — that’s what powers justRead’s roadmap. Transparency and user collaboration should be standard practice, not an afterthought.&lt;/p&gt;

&lt;p&gt;Peter&lt;br&gt;
Reader, Developer, justRead Creator&lt;/p&gt;

</description>
      <category>development</category>
      <category>mobile</category>
      <category>ios</category>
      <category>swift</category>
    </item>
    <item>
      <title>Building justRead: A Technical Comparison with Apple Books, Kindle, and BookFusion</title>
      <dc:creator>Petr Jahoda</dc:creator>
      <pubDate>Mon, 12 Jan 2026 11:11:33 +0000</pubDate>
      <link>https://forem.com/petr_jahoda_60293bc6325fb/building-justread-a-technical-comparison-with-apple-books-kindle-and-bookfusion-hg8</link>
      <guid>https://forem.com/petr_jahoda_60293bc6325fb/building-justread-a-technical-comparison-with-apple-books-kindle-and-bookfusion-hg8</guid>
      <description>&lt;p&gt;This is part three of our &lt;a href="https://justread.app" rel="noopener noreferrer"&gt;justRead&lt;/a&gt; development series. Instead of marketing claims, we're doing a detailed visual comparison of how four e-reader apps handle the fundamentals: UI/UX, library organization, customization, and performance.&lt;/p&gt;

&lt;p&gt;What we discovered: UX conventions matter more than feature count. Users shouldn't need to learn new patterns. We analyzed seven key areas—UI design, library sorting, font customization, color options, menu depth, margin control, and landscape lock.&lt;/p&gt;

&lt;p&gt;Key findings:&lt;/p&gt;

&lt;p&gt;justRead wins on accessibility and customization depth (2 menu levels vs 3-4 for competitors)&lt;/p&gt;

&lt;p&gt;Supporting 5,000+ books requires thoughtful architecture: Apple Books and justRead both handle this; BookFusion crashes&lt;/p&gt;

&lt;p&gt;Font freedom matters: custom fonts + system fonts vs limited presets in competitors&lt;/p&gt;

&lt;p&gt;Respecting Apple's design conventions creates better UX than breaking them&lt;/p&gt;

&lt;p&gt;We also built unique features competitors don't have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;20–20–20 eye care reminders&lt;/li&gt;
&lt;li&gt;rich reading statistics&lt;/li&gt;
&lt;li&gt;community voting on features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Read the full visual comparison and see how we approached these design decisions: 

&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://itnext.io/justread-vs-apple-books-vs-kindle-vs-bookfusion-00e93199eb95" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;itnext.io / justread-vs-apple-books-vs-kindle-vs-bookfusion-00e93199eb95&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;




</description>
      <category>swift</category>
      <category>swiftui</category>
      <category>ios</category>
      <category>mobile</category>
    </item>
  </channel>
</rss>
