
    <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" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
      <channel>
        <title>Jake Nelson</title>
        <link>https://jknlsn.com</link>
        <description>A man and his blog</description>
        <language>en</language>
        <lastBuildDate>Thu, 04 Aug 2022 09:43:00 GMT</lastBuildDate>
        <atom:link href="https://jknlsn.com" rel="self" type="application/rss+xml"/>
        
    <item>
      <guid>https://jknlsn.com/posts/2022-08-04-making-predictions</guid>
      <title>Making predictions</title>
      <description>I'm currently reading The Art of Thinking Clearly by Rolf Dobelli. He highlights several interesting biases that relate to our ability to make effective predictions.</description>
      <link>https://jknlsn.com/posts/2022-08-04-making-predictions</link>
      <pubDate>Thu, 04 Aug 2022 09:43:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>I'm currently reading <a href="https://www.goodreads.com/book/show/16248196-the-art-of-thinking-clearly">The Art of Thinking Clearly by Rolf Dobelli</a>, which is a fascinating book. The author summarily lists an extraordinary number of biases affecting thinking and decision-making. One of these that stood out more than the rest was <strong>hindsight bias</strong>.</p>
<blockquote>
<p>In retrospect, everything becomes clear and inevitable.</p>
</blockquote>
<p>It is common to join the dots after the fact and convince ourselves that this was always the most likely outcome. It is effortless to determine both the route and the destination when looking backwards down the one path traversed to get to the present, but it is much more challenging to do so looking forward. However, it is easy to become convinced that we would have chosen the correct path and destination were we looking at it contemporaneously because of how obvious it seems when looking back.</p>
<p>Dobelli suggests that it can be a valuable exercise to journal and write down your predictions to revisit later, to emphasise how fallible most of your predictions are and gain insight into the genuine unpredictability of the world.</p>
<p>Another bias that struck me as related is the <strong>forecast illusion</strong>, which refers to the discovery that experts are rarely more accurate than a layperson when asked to make predictions and forecasts.</p>
<blockquote>
<p>In terms of accuracy, the experts fared only marginally better than a random forecast generator.</p>
</blockquote>
<p>Dobelli's advice to counter this bias was to take two actions. Firstly, always inquire into the predicters motives and incentives, and second look into their track record.</p>
<p>After reading about these biases, I decided to do the tiniest part to combat these. I will go through and make some predictions on areas that I have opinions on and try and do my best to explain why. I'll lay out my reasoning and try to identify biases and incentives. By doing this, then one way or another, successful or unsuccessful, I can look back and potentially learn. Or gloat, or laugh. Give youngsters material to dunk on me with on Twitter2100.</p>
<p>Stay tuned for my predictions on full self-driving, cryptocurrency, artificial general intelligence and digital privacy over the next few weeks. If there are topics that you're interested in hearing my prediction on apart from these listed, get in touch and let me know!</p>
<p><strong>Bonus: alternate post cover images</strong></p>
<p>Dall-E 2 prompt: &quot;an award winning photo of a journalist speaking to a crowd, fish eye lens, unsplash, digital art&quot;.</p>
<p>I liked the last one, but it felt too atmospheric for the post!</p>
<p><img src="https://jknlsn.com/assets/blog/2022-08-04-making-predictions/making-predictions-alternate.jpg" alt="Dall-E 2 prompt: an award winning photo of a journalist speaking to a crowd, fish eye lens, unsplash, digital art"></p>
]]></content:encoded>
    </item>
  
    <item>
      <guid>https://jknlsn.com/posts/2022-07-21-holidays-and-asimov</guid>
      <title>Holidays and Asimov</title>
      <description>Astute observers will notice that there has been silence from this corner of the internet for the last six weeks. My partner and I took some time off to visit parts of Europe we'd never seen before, and I read Asimov along the way.</description>
      <link>https://jknlsn.com/posts/2022-07-21-holidays-and-asimov</link>
      <pubDate>Thu, 21 Jul 2022 07:59:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Since starting this blog in January, it has been a goal to write once a week. Astute observers will notice that there has been silence from this corner of the internet for the last six weeks. My partner and I took some time off to visit parts of Europe we'd never seen before, travelling through Italy, Portugal and Spain.</p>
<p>We holed up inside for relief when exploring became uncomfortable in the afternoon heat. The heat forcing us inside was fantastic, as it gave me the excuse I needed to sit down and read. One of the few goals I had set for the holiday was to use my laptop as little as possible and do as little work as possible. At times the line between work and life slips and blurs. On good days that is because I enjoy what I do, and on others, due to a fear of inadequacy or failure. This holiday was the first period of extended time off that the two of us had taken since 2019, and I was determined to have a proper break. Don't get me wrong; there were plenty of times I wanted to! I have an idea for a weather app I want to build, and I kept thinking of it all trip. Instead of coding, everything just went into notes, and this was the right decision. We had a wonderful time.</p>
<p>While hiding from the sun indoors or frequenting cute coffee shops, I read a lot of Isaac Asimov. I'd previously read a few short stories of his, but never a collected volume.</p>
<p>They blew me away.</p>
<p>Asimov's Foundation series is incredible, and if you haven't read it, then I beg you to do so. So that I can talk about it with more people, if nothing else! I thoroughly enjoyed the books and felt they still hold up well today. I was consistently mind blown every time I remembered when Asimov wrote these books. I still can't quite comprehend that these stories were created in the 1940s and '50s when so much of the technology I take for granted was nascent or non-existent. The tales and the world-building completely drew me in, from the century-spanning sagas to the slice-of-life short stories, each with a thought-provoking twist or what if.</p>
<p><strong>Asimov's stories show a future of optimism.</strong></p>
<p>A future of science overcoming challenges and the human race exploring and thriving. Not without difficulties, but with human tenacity overcoming these collectively.</p>
<p>Some days it seems there is always a new crisis that we can't tackle for society's collective benefit because capitalism may have to slow down the tiniest bit. Access to health care and climate change are the most glaring examples. However, these books were a breath of fresh air and a reminder to imagine and work toward a better future.</p>
<p><strong>P.S.</strong></p>
<p>The cover image looks a little bit different this time, doesn't it? That's DALL-E at work and using my monthly free credits productively. I'm having a blast playing around with it and seeing what it can create. Expect it to be the focus of a post soon! In the meantime, access has opened up, so give it a try yourself. This prompt was about a robot on holiday in a futuristic city.</p>
]]></content:encoded>
    </item>
  
    <item>
      <guid>https://jknlsn.com/posts/2022-06-09-over-eagerness</guid>
      <title>Over eagerness</title>
      <description>I am a sucker for new features, and the new iOS 16, Xcode and macOS updates shown at WWDC are no exception. Install betas on a partition, folks!</description>
      <link>https://jknlsn.com/posts/2022-06-09-over-eagerness</link>
      <pubDate>Thu, 09 Jun 2022 21:47:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>I am a sucker for new features, and the new iOS 16, Xcode and macOS updates shown at WWDC are no exception. Install betas on a partition, folks! A few years ago, with the Catalina beta, I hit a ton of issues on my Macbook Pro at the time, the 2014 model that got me through uni. However, last year I was on the betas very early in the piece and had no issues. Unfortunately, this lulled me into a false sense of security.</p>
<p>I forgot that at this time last year, I had only one app on the store, which wasn't receiving regular updates. Now I have three and even more in development. So a stable development environment is pretty essential. All this is a long way around saying that I jumped into the macOS Ventura beta without thoroughly reading the compatibility notes and now have to jump back into macOS Monterey.</p>
<p>Install betas on a partition, folks!</p>
<p>I am very excited about some of the new APIs and capabilities and cannot wait to implement them in my existing apps and new ideas, but first of all, I need to reinstall Monterey. Back soon.</p>
<p><strong>Credits</strong></p>
<p>Cover image by <a href="https://unsplash.com/@krakenimages">krakenimages</a> on <a href="https://unsplash.com/photos/8RXmc8pLX_I?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditShareLink">Unsplash</a></p>
]]></content:encoded>
    </item>
  
    <item>
      <guid>https://jknlsn.com/posts/2022-06-02-beginner-confusion</guid>
      <title>Beginner confusion</title>
      <description>When you start learning anything, it will all seem incomprehensible. Just remember that will change. Slowly, but surely.</description>
      <link>https://jknlsn.com/posts/2022-06-02-beginner-confusion</link>
      <pubDate>Thu, 02 Jun 2022 11:19:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Sometimes I don't know where to start. On a knowledge scale, I don't know what I don't know! I need to remember that this feeling is ok. It makes things pretty tough for a little while, but not forever.</p>
<p>I've recently had two experiences using frameworks in iOS that were utterly new to me, and I knew nothing about them prior. In both cases, the most challenging part was right at the start, when I knew so little that even trying to search for more information was returning irrelevant or unrelated results.</p>
<p>A little while ago, I worked on implementing the most requested feature from users of my <a href="https://smallcolossus.com/apps/barcodes">Barcodes app for iOS</a>, adding cards to Apple Wallet (<a href="https://apps.apple.com/us/app/id1610894014?ct=smallcolossus.com">now available since version 1.1!</a>). Earlier this week, I used SpriteKit to add a fun little easter egg game to a utility app that I am making to block sites sending cookies.</p>
<p><strong>Mistakes I made:</strong></p>
<ul>
<li>Not searching GitHub deeply enough, to begin with, led to me missing some great implementations. Foolishly I did one search and decided there must not be anything there. Try multiple keywords and variations!</li>
<li>Discounting tutorials or resources as I assumed they were outdated.</li>
</ul>
<p><strong>Things I learned:</strong></p>
<ul>
<li>The absolute basics of Objective C while wrestling with an on-device approach with OpenSSL.</li>
<li>How used to Swift I have become.</li>
<li>The basics of SpriteKit!</li>
</ul>
<p>I studied Computer Science at university, and during the course, I did a unit which taught C. It's been a few years since that class, though, and I have become very used to such fancy things as auto-completion and type safety! I'd also done a unit on graphics and animation, but it's been a long time between collision detections. Luckily SpriteKit makes all of this very easy to handle, but you still need to have a rough idea of what you're trying to do to be able to search and find specifics.</p>
<p>As I've become used to Swift and aspects of iOS development, I've also forgotten what it is like to be an absolute beginner. When you start learning anything, it will all seem incomprehensible. You may experience total beginner confusion, with no way out necessarily visible. Just remember that will change. Slowly but surely. Just stick with it, breathe, look for resources and help, and remember all the previous times you were a beginner and then you learned and succeeded.</p>
<p>Trust that your expression won't be the same as the puppy in the photo forever, just for now.</p>
<p><strong>Credits</strong></p>
<p>Cover image by <a href="https://unsplash.com/@mtresemer?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Michelle Tresemer</a> on <a href="https://unsplash.com/s/photos/confusion?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>
]]></content:encoded>
    </item>
  
    <item>
      <guid>https://jknlsn.com/posts/2022-05-26-delight-and-remove-friction</guid>
      <title>Delight and remove friction</title>
      <description>I was recently reminded of an incredibly influential element of the customer experience that is easy to overlook.</description>
      <link>https://jknlsn.com/posts/2022-05-26-delight-and-remove-friction</link>
      <pubDate>Thu, 26 May 2022 08:53:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>My partner recently had to return some online shopping that turned out not to be a good fit. We went through the returns process, and it couldn't have been easier. Go to a set of parcel lockers a few blocks away, drop the items off in their original conveniently resealable packaging, scan a QR code, and get a receipt. This experience reminded me of an incredibly influential element of the customer experience that is easy to overlook.</p>
<p><strong><em>Delight.</em></strong></p>
<p>My partner was so happy with this returns process that she immediately planned to shop at this site more often. What may have been a negative connotation with the company for clothes not fitting quite right became a positive because of the joy brought on by the ease at which she could return the items. The key here is that the company is perceived as going out of its way to make something easier for customers, going above and beyond expectations.</p>
<p><strong><em>Reduce friction.</em></strong></p>
<p>By removing the negatives, the company incentivised spending. A short term view of an approach like this would show that the cost of returns will increase. However, a holistic overview would identify the real reason the company does this, in that the increase in profit from sales that wouldn't have happened without this policy more than makes up for the cost.</p>
<p>This approach is similar to Apple's forgiving retail return policies. By ensuring that the risk of you not liking the product and wanting to return it is low, they can incentivincredibly influential element of the customer experience that is easy to overlook.e every customer for whom this was their only barrier to purchase.</p>
<p>Are there ways that I can apply this approach to my apps? I already try to inspire delight from users, and I'll stay on the lookout for ways to reduce friction and encourage purchases.</p>
<p><strong>Credits</strong></p>
<p>Cover image by <a href="https://unsplash.com/@freestocks?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">freestocks</a> on <a href="https://unsplash.com/s/photos/shopping?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>
]]></content:encoded>
    </item>
  
    <item>
      <guid>https://jknlsn.com/posts/2022-05-19-tips-for-testflight</guid>
      <title>Tips for TestFlight</title>
      <description>Are you making an iOS app and nearly ready for your TestFlight launch? What can you validate with beta testing?</description>
      <link>https://jknlsn.com/posts/2022-05-19-tips-for-testflight</link>
      <pubDate>Thu, 19 May 2022 09:26:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Are you making an iOS app and nearly ready for your TestFlight launch? What can you validate with beta testing?</p>
<ul>
<li>Idea ❌</li>
<li>Business model validation ❌</li>
<li>Correctness and functionality ✅</li>
</ul>
<p>I don't think that looking for beta testers should be done where you look for users. I initially treated beta testing as providing idea and market validation and realised that these are not the same. As users can get your IAP for free on TestFlight, I have found that the interest in the beta does not reflect the interest in your paid or released app.</p>
<p>There are several subreddits dedicated to TestFlight and beta testing and many websites you can submit your app to, and this is where I recommend you go to find testers. There is also Twitter, and throwing it out there can get you some great feedback from other developers. Feel free to @ me with your TestFlight, and I will check it out!</p>
<p>This is not a golden rule as with just about everything I write. Different approaches may work best for other people and different apps. These are just my thoughts, what I have done previously, and what I now do.</p>
<table>
<thead>
<tr>
<th>App</th>
<th>Approach</th>
<th>Testers</th>
<th>Feedback</th>
</tr>
</thead>
<tbody>
<tr>
<td>Mixtapes</td>
<td>Public beta link and share on Twitter/Reddit/Airport</td>
<td>1470</td>
<td>👍</td>
</tr>
<tr>
<td>Word Game Hero</td>
<td>Post on Twitter and ask people to DM me their email</td>
<td>86</td>
<td>👍👍👍</td>
</tr>
<tr>
<td>Barcodes</td>
<td>Post on Twitter and ask people to DM me their email</td>
<td>46</td>
<td>👍👍👍</td>
</tr>
<tr>
<td>Contact Toolbox <sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup></td>
<td>Post on Twitter with form for email submission</td>
<td>6</td>
<td>N/A</td>
</tr>
</tbody>
</table>
<p>Despite having a far greater number of testers, I have received the least feedback on Mixtapes.<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup> A smaller, more engaged group of testers has worked out better for me.</p>
<p>The number of users testing your app is likely not as important as the quality! I have hundreds of beta testers for my music app, Mixtapes, and I have not received as much feedback as from the couple of dozen I have testing Word Game Hero and Barcodes. This could be just my experience, so you can definitely experiment yourself, but I suspect that having to put your email in is correlated to a greater interest in testing the app.</p>
<p>I will frequently offer to add a user to the beta if they have emailed me with an issue or suggestion, even if I don't have a fix ready. I highly recommend doing this. If they cared enough to email, there is a greater chance that they will also care enough to test and give feedback! A few people have turned this offer down, and a few have accepted and then never tested it, but the majority have provided valuable feedback.</p>
<p><strong>What do I recommend now?</strong></p>
<p>Use <a href="http://tally.so/">Tally.so</a> to make a simple form for email submissions and add these to your beta invite list. <a href="https://tally.so/r/3jaZQJ">This is the current one I am using for Contact Toolbox</a>.</p>
<p>P.S. If you want access to the betas of any of my apps, send me an email or get in touch on Twitter!</p>
<p><strong>Credits</strong></p>
<p>Cover image by <a href="https://unsplash.com/@ampalmer?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Andrew Palmer</a> on <a href="https://unsplash.com/s/photos/plane?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>Contact Toolbox is not yet approved for testing, so I can't actually distribute the beta yet. <a href="#fnref1" class="footnote-backref">↩︎</a></p>
</li>
<li id="fn2" class="footnote-item"><p>Ironically, this is probably the app with the most testing needed and the most issues due to the complexity of working with Apple Music! <a href="#fnref2" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
]]></content:encoded>
    </item>
  
    <item>
      <guid>https://jknlsn.com/posts/2022-05-12-journey-game</guid>
      <title>Play Journey</title>
      <description>If you haven't played Journey yet, go play it before reading this. Just trust me on this. I played it on iOS, but any platform will do. Listen to the soundtrack while you play.</description>
      <link>https://jknlsn.com/posts/2022-05-12-journey-game</link>
      <pubDate>Thu, 12 May 2022 09:26:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>If you haven't played Journey yet, go play it before reading this. Similar advice is given in most media you will see about Journey, such as <a href="https://hypercritical.co/2012/11/27/strange-game">Strange Game by John Siracusa on Hypercritical</a>, and it is great advice. Just trust me on this. I played it on iOS, but any platform will do. Listen to the soundtrack while you play.</p>
<p>Trying to make a living as an independent software developer means that occasionally, or often, I fall into the trap of working many more hours than are reasonable. When this happens, I tend to feel guilt from activities that I will enjoy that aren't directly productive, like playing a game, shooting hoops, or reading. This isn't the healthiest state, but when I saw media coverage of Journey again on social media a few months ago and had never played it, I scheduled some time to play.</p>
<p>I kept reaching for a story while I played, trying to get ahead of what I was sure would be some big reveal. Are there bad guys? Who are they? Am I freeing these creatures? I get some kind of energy from them; we must be on the same side.</p>
<p>Playing through Journey was an almost meditative experience, one I sincerely enjoyed.</p>
<p>Unfortunately, the game's multiplayer elements were almost completely lost on me, as I only encountered others very briefly. For the majority of the game, I was alone. The strangest thing was that I felt far from alone! During one of the scenes, almost gliding down slopes of sand with these winged creatures flying next to me, it felt like I was surrounded by friends. Sitting at home, gazing into my phone screen with my headphones on, I felt warmth, companionship, and calm. I don't know if I've ever felt that level of immersion in a game before. I've enjoyed games before, sure, but this kind of visceral experience might be new.</p>
<p>I'll likely set aside a few hours to play through it again, as playing through it in one session was a fantastic way to experience the game. It made me think, what other games might have a similar effect? What is the breadth of responses that video games and media can elicit? What else could I be feeling or experiencing if I tried suitable media?</p>
<p><strong>Credits</strong></p>
<p>Cover image from <a href="https://www.igdb.com/games/journey/presskit">Journey's press kit on IGDB</a></p>
]]></content:encoded>
    </item>
  
    <item>
      <guid>https://jknlsn.com/posts/2022-05-05-app-store-improvements</guid>
      <title>Alternate App Store storefronts</title>
      <description>I'd like to build my own interface to the App Store, give it a new facade or veneer. I think it could use a fresh coat of paint, some new staff and management practices. Oh and a new algorithm.</description>
      <link>https://jknlsn.com/posts/2022-05-05-app-store-improvements</link>
      <pubDate>Thu, 05 May 2022 09:12:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>I'd like to build my own interface for the App Store and give it a new facade or veneer. I think it could use a fresh coat of paint, some new staff and management practices. Oh, and a new algorithm.</p>
<p>First off, my apps will be on the home page all day, every day. That's it, no algorithm, nothing. Just my apps. This will maximise my satisfaction with the service and alleviate consumer complaints that the algorithm is nonsense.</p>
<blockquote>
<p>No algorithm, no problems.</p>
</blockquote>
<p>- Jake Nelson</p>
<p>In all seriousness, though, I can think of loads of ways to further refine the search results.</p>
<p>Imagine if you could filter by ratings, reviews, review sentiment, recency of updates, full-text search for features and more.</p>
<p>Turn on or off expanding your search to be a fuzzy match or include synonyms, include text in reviews and the description or exclude it, and filter out results based on privacy details.</p>
<p>Wouldn't that be amazing?</p>
<p><strong>FAQ's</strong></p>
<blockquote>
<p>Is this legal?</p>
</blockquote>
<p>I don't know, but I hope so. I'd really like to build this so if anyone who is a lawyer can give me some advice that would be splendid. There are a lot of sites that seem to scrape the App Store, but then the Terms and Conditions on the Apple site seem to say you can't do this. It is all a little too wordy for me to be certain.</p>
<blockquote>
<p>Is your App Store Directory going to be the only one?</p>
</blockquote>
<p>Golly no. That would defeat the point! If you don't like my store(front), then use another. All the benefits of App Store review and curation<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>, but with interchangeable algorithms. Of course, you should just use mine as it will be the best.</p>
<blockquote>
<p>How do you make money?</p>
</blockquote>
<p>No idea. Ads? Maybe? Similar to the current App Store search ads. Oh, and increased purchases of my own apps, given their permanent features. Kinda like the Centr app by Chris Hemsworth is currently receiving on the App Store. There is no need for me to link it, just open the App Store and scroll. It will be a few down if it is somehow not the top feature.<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup></p>
<blockquote>
<p>Does this solve sideloading and anticompetitive issues?</p>
</blockquote>
<p>No, not at all. This would be an alternative way to search for Apple's App Store apps.</p>
<blockquote>
<p>This sounds great! What do you need to make this happen?</p>
</blockquote>
<p>An API and permission from Apple ideally, and that's about it!</p>
<p><strong>Conclusion</strong></p>
<p>Apple, you have my number. Call me, and we can discuss it.</p>
<p>Photo by <a href="https://unsplash.com/@tmwd?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Artem Gavrysh</a> on <a href="https://unsplash.com/s/photos/store-front?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>I know, debatable yada yada yada. <a href="#fnref1" class="footnote-backref">↩︎</a></p>
</li>
<li id="fn2" class="footnote-item"><p>If you can't see it, you may need to change to the Australian App Store. If it's not featured there, contact me, and I will refund you the ticket price for this blog. <a href="#fnref2" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
]]></content:encoded>
    </item>
  
    <item>
      <guid>https://jknlsn.com/posts/2022-04-28-pleasing-everyone</guid>
      <title>Pleasing everyone</title>
      <description>You can't please everyone. So why do we try? I don't know, but I fall into this trap myself often. I often encounter this with my apps.</description>
      <link>https://jknlsn.com/posts/2022-04-28-pleasing-everyone</link>
      <pubDate>Thu, 28 Apr 2022 09:56:00 GMT</pubDate>
      <content:encoded><![CDATA[<blockquote>
<p>&quot;You can please some of the people all of the time, you can please all of the people some of the time, but you can't please all of the people all of the time&quot;.</p>
</blockquote>
<p>- John Lydgate</p>
<p>You can't please everyone. So why do we try? I don't know, but I fall into this trap myself often. I often encounter this with my apps, where I agonise over the pricing and business model. I am writing this as a reference to come back to when I forget that this is unachievable.</p>
<p>For example, I'll use common refrains on Reddit when a new app is posted. It is only fair to note that when I last posted an app on Reddit, I got a really great response and lots of support which I am deeply grateful for! This speaks to the initial quote, it's not that you can't please lots of people; you just can't please <em>everybody</em>. Also, not everyone gets as lucky with a predominantly positive response; sometimes, developers post their apps and get only negative responses. There are also the posts that complain about the prevalence of subscription models, the apparent greed of developers, or the perceived lack of good cheap or free apps on iOS.</p>
<p>Here are some of the types of responses I've seen. I think all of them are valid, and everyone is entitled to their own opinion, so I'm not saying they are wrong, just that they can't all be met simultaneously.</p>
<p><strong>Subscription</strong></p>
<p>&quot;Why not paid up front?&quot;</p>
<p>&quot;Developers are getting greedy, and this app isn't worth a subscription!&quot;</p>
<p>&quot;There is no new content or anything, it doesn't need an external server or have external costs.&quot;</p>
<p><strong>In-app purchase</strong></p>
<p>&quot;Not useful without paying.&quot;</p>
<p>&quot;Why aren't features free?&quot;</p>
<p><strong>Paid upfront:</strong></p>
<p>&quot;How am I meant to try the app if I have to buy it first?&quot;</p>
<p>&quot;Why not lower cost?&quot;</p>
<p>&quot;Why not free?&quot;</p>
<p><strong>Free:</strong></p>
<p>&quot;Yay!&quot;</p>
<p>Well, I mean, surely free will make everyone happy, right? Nope. Maybe initially and very briefly. If the app is complete and there is <em>nothing</em> that could ever require maintenance or improvement, no bugs to fix, and no SDK changes ever impact it, it may even get a nice long run. In this case, the app will live a long and happy life until being pulled by the App Store in 2036, when all apps must be 128 bit compatible. Oh, and also, no one, not a single person, ever asks for help or support. That is how good this app is.</p>
<p>It's pretty unlikely the above is the case. This means that the developer will likely need to invest time and effort for the app to actually be valuable past the immediate short term. The developer also has to pay to put the app on the App Store at a minimum, will likely have to deal with support, and doing all this at a cost to themselves is not great.</p>
<p>If the app provides value, there will be people who would choose to pay a premium for support and quality, and if the app is exclusively free, they won't get that.</p>
<p>If you're a visual type, here is a quick example table using just two users showing what they will be happy with. As soon as you have these two users both wanting your app, you can't make everyone happy!</p>
<table>
<thead>
<tr>
<th>User</th>
<th>Subscription</th>
<th>Premium IAP</th>
<th>Paid upfront</th>
<th>Free</th>
</tr>
</thead>
<tbody>
<tr>
<td>Free Frankie</td>
<td>😡</td>
<td>😠</td>
<td>😤</td>
<td>🤩</td>
</tr>
<tr>
<td>Premium Pattie</td>
<td>🤩</td>
<td>🤩</td>
<td>🤩</td>
<td>😢</td>
</tr>
<tr>
<td>Everyone?</td>
<td>❌</td>
<td>❌</td>
<td>❌</td>
<td>❌</td>
</tr>
</tbody>
</table>
<p><strong>Takeaway</strong></p>
<p>Remember, you can't please everyone. You can please lots of people, and importantly yourself. Aim to do that, and consider that the goal.</p>
<p>Credits:</p>
<p>Photo by <a href="https://unsplash.com/@ryanmfranco?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Ryan Franco</a> on <a href="https://unsplash.com/s/photos/angry?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>
<p>P.S. Unsplash has some unreal photos for the search <a href="https://unsplash.com/s/photos/angry">&quot;angry&quot;</a>, some of these are truly something else.</p>
]]></content:encoded>
    </item>
  
    <item>
      <guid>https://jknlsn.com/posts/2022-04-21-why-you-should-use-vote-compass</guid>
      <title>Why you should use Vote Compass</title>
      <description>Regardless of your beliefs and views, I think this tool is invaluable to check that who you are voting for actually have policies that line up with your own.</description>
      <link>https://jknlsn.com/posts/2022-04-21-why-you-should-use-vote-compass</link>
      <pubDate>Thu, 21 Apr 2022 11:35:00 GMT</pubDate>
      <content:encoded><![CDATA[<h2>What is Vote Compass?</h2>
<blockquote>
<p>Vote Compass shows you how your views align with those of the candidates running for election.</p>
</blockquote>
<p>- <a href="https://votecompass.com">Vote Compass</a></p>
<blockquote>
<p>Vote Compass is an interactive, online voting advice application developed by political scientists and run during election campaigns. It surveys users about their political views and, based on their responses, calculates the individual alignment of each user with the parties or candidates running in a given election contest.</p>
</blockquote>
<p>- <a href="https://en.wikipedia.org/wiki/Vote_Compass">Wikipedia</a></p>
<p>I first got introduced to <a href="https://votecompass.com">Vote Compass</a> in 2016 when discussing the upcoming federal election. At the time, I thought I would vote for the Australian Liberal Party, a right-wing party nominally of social and fiscal conservatism. I had said something to the effect that while I disagreed on some things, overall their policies reflected what I wanted from the government best of the available options. Someone suggested that I use Vote Compass to check if that was true.</p>
<p>I pulled it up on my phone, spent a couple minutes filling it out and thinking through the questions posed, and it promptly told me that the party I aligned with most was the Greens.</p>
<p>I was shocked.</p>
<p>I hadn't even considered voting for the Greens, and even with the benefit of hindsight, I can't pinpoint why. Why was the image in my head of a political party's goals and policy so different from reality? What I want for the country is different from what the party I planned to vote for intends to do.</p>
<p>Now is this media bias? In Australia, we have a problem with media concentration and bias<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>, as being brought to light by the work being done by the <a href="https://murdochroyalcommission.org.au">Murdoch Royal Commission</a>. I think media bias is definitely a significant contributing factor, but it is hard to look back and pinpoint all the factors that influenced my voting inclination at the time. You have family views, education, and more coming into the mix. Even if I could pinpoint all of this accurately, it wouldn't necessarily generalise to people other than myself.</p>
<p>While this experience was slightly confronting at the time, it was invaluable. The most significant impact was questioning my pre-conceived notions about political parties and systems and trying to look behind the curtain a little more. Now I ask a lot more questions, and I am more engaged.</p>
<h2>Why should you use Vote Compass?</h2>
<p>Regardless of your beliefs and views, I think this tool is invaluable to check that who you are voting for actually have policies that line up with your own, and they are not just coasting on reputation or a name.</p>
<p>Everyone is affected by politics. Some more than others indeed, but I believe that everyone living in a society should take a minimum of interest in how that society is run, both how it affects themselves and others.</p>
<p>If you're eligible to vote in the upcoming Australian federal election, check out <a href="https://votecompass.abc.net.au">Vote Compass</a> before going to the polls. You might be surprised by what you find.</p>
<p>Photo by <a href="https://unsplash.com/@pkripperprivate?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Parker Johnson</a> on <a href="https://unsplash.com/?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p><a href="https://www.theguardian.com/australia-news/2021/apr/21/former-us-intelligence-director-backs-turnbull-and-rudds-call-for-murdoch-media-inquiry">James Clapper says royal commission into Rupert Murdoch's empire in Australia a 'good idea for the sake of transparency'</a> <a href="#fnref1" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
]]></content:encoded>
    </item>
  
    <item>
      <guid>https://jknlsn.com/posts/2022-04-14-what-to-write-about</guid>
      <title>What to write about</title>
      <description>I was really struggling to find a topic for this week's blog. So much so that I started wondering why I was finding this so hard.</description>
      <link>https://jknlsn.com/posts/2022-04-14-what-to-write-about</link>
      <pubDate>Thu, 14 Apr 2022 10:16:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>I was really struggling to find a topic for this week's blog. So much so that I started wondering <em>why</em> I was finding this so hard.</p>
<p>I don't want to just rehash content I stumble upon and find interesting, but I also think there is very little that I am truly qualified to write about! Is this true? Or is it imposter syndrome? I don't know.</p>
<p>However, this is my blog, so I guess I can do what I want.</p>
<p>My goal initially is to write a new post weekly to become more comfortable with writing. However, this has the side effect that I should have realised earlier, that there are no guardrails or defined categories to plumb when the well of inspiration seems to have run dry.</p>
<p>So my next task I am setting myself is to go through the list of partial ideas and half scrawled notes and see if there is anything coherent to be found, and try and form a process where I am corraling my thoughts into a readable form in advance. Well, at least for as long as the self-imposed weekly posting schedule is maintained. I don't feel like a good writer yet? I feel pretty far from that, so I guess I have many more weeks ahead. I still don't feel particularly comfortable writing, which is my north star metric. At the end of the day, most other metrics are not measures of what I want out of this blog.</p>
<p>A conclusion that I've come to is that part of my discomfort in writing, as well as my struggle to find topics, is that my taste-skill gap is <strong>large</strong>. I think I first became aware of the taste skill when I saw it mentioned on Twitter, and it has resonated ever since. Wentin's article <a href="https://build.typogram.co/p/the-taste-skill-gap?s=r">The Taste Skill Gap</a> is a great read if you're new to the concept, and doubly so if you're in tech.</p>
<p>As Ira Glass said:</p>
<blockquote>
<p>“Nobody tells this to people who are beginners; I wish someone told me. All of us who do creative work, we get into it because we have good taste. But there is this gap. For the first couple years you make stuff, it’s just not that good. It’s trying to be good, it has potential, but it’s not. But your taste, the thing that got you into the game, is still killer. And your taste is why your work disappoints you. A lot of people never get past this phase, they quit. Most people I know who do interesting, creative work went through years of this. We know our work doesn’t have this special thing that we want it to have. We all go through this. And if you are just starting out or you are still in this phase, you gotta know it’s normal, and the most important thing you can do is do a lot of work. Put yourself on a deadline so that every week you will finish one story. It is only by going through a volume of work that you will close that gap, and your work will be as good as your ambitions. And I took longer to figure out how to do this than anyone I’ve ever met. It’s gonna take a while. It’s normal to take a while. You’ve just gotta fight your way through.”</p>
</blockquote>
<p>So expect to see more posts, as I fight my way through!</p>
<p><strong>P.S.</strong></p>
<p>Of course, maybe there is a technical solution for this? I've seen the subreddit <a href="https://www.reddit.com/r/WritingPrompts/">r/WritingPrompts</a>; maybe there is a similar subreddit or forum for blog posts?</p>
<p>I've found <a href="https://biancabass.com/blog/lists/52-writing-prompts-to-inspire-your-next-blog-post">Bianca Bass's post on writing prompts</a>, which looks like it has some gems in there.</p>
<p><strong>P.P.S.</strong></p>
<p>If you have any suggestions for things to write about, let me know! I can't promise I will write about them, but I can promise I will consider your tips.</p>
<p>Photo by <a href="https://unsplash.com/@vbk_media?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Valentin B. Kremer</a> on <a href="https://unsplash.com/s/photos/thinker?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</p>
]]></content:encoded>
    </item>
  
    <item>
      <guid>https://jknlsn.com/posts/2022-04-07-communication-vs-consumption-dichotomy</guid>
      <title>The communication vs consumption dichotomy</title>
      <description>I'm much less frazzled when I try to use RSS exclusively for reading and email for communication. Actual communication is now appropriately important, and content updates can be consumed at my discretion.</description>
      <link>https://jknlsn.com/posts/2022-04-07-communication-vs-consumption-dichotomy</link>
      <pubDate>Thu, 07 Apr 2022 10:16:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>There is a semi-clear distinction between the main categories of items in my inbox. There are communications, which I may respond to or need to read in a time-sensitive matter, and there is content, which I very rarely respond to and which is even more rarely time-critical.<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> As I've seen more interesting things online, the amount of content in my inbox has grown to dwarf the amount of communication. I am now subscribed to content ranging from personal blogs, commentary on tech, the climate crisis, politics and fiction. The amount of content grew to massively outweigh the communication in my inbox.</p>
<p>I'm much less frazzled when I try to use RSS exclusively for reading and email for communication.</p>
<p>I've noticed this only recently when I realised I was getting stressed out by new emails. I was waiting for a couple of important emails, and everything else became a source of tension and noise. The mailing list paradigm blurs the boundaries between communications and consumption far too much for my monkey brain to deal with. Every email is treated as potentially impactful and time-critical, so every notification must be assessed.</p>
<p>Any entity I give my email address to can choose when to contact me. I want this to be the case, as it is the basis of how email works, but over the years, my internal gauge has shifted far too much towards inputting my email to every site that looks remotely interesting. Yes, there are spam filters, technical tools to block emails, etc. The better solution is simpler: being more judicious about who I give my email to and why. Now, if there is a source of content that doesn't have an RSS feed available, it suddenly becomes a much higher bar to decide whether or not to subscribe.</p>
<p>Using RSS to subscribe to content updates solves this problem.</p>
<p>An RSS reader can be configured however I like. To give me notifications when there is new content available, or just to wait for me to check it manually and pull down everything new from my sources. Show me a badge of unread articles, or keep that number hidden completely. I can treat RSS as my own personal newspaper, unencumbered by algorithmic sorting of content to maximise engagement, and on my own time. It also means that I can ignore it when I don't have the bandwidth for a while.</p>
<p>The fact that I sometimes get time-sensitive emails that I need to reply to means that I can't treat my email as a whole the same way as I can an RSS app. Even when I don't have excess bandwidth, I still need to reply to emails. Splitting content and communications out has had an outsized impact on how I interact with both.</p>
<p>Actual email is now appropriately important, and content updates can be consumed at my discretion.</p>
<p>I know I am incredibly late to the RSS bandwagon, but it is helping reshape my interaction with content in a positive light.</p>
<p><strong>Questions</strong></p>
<ol>
<li>
<p>What about the growing content economy around tools like Substack and other paid publications? These rely on the number of email subscribers for tracking growth and analytics for advertising or sponsorship.</p>
<p>Can analytics be done on RSS feeds? Presumably yes, using IP or other identifying characteristics. Gosh, I would even support an update to the spec or ecosystem if it encouraged more people to use it for consumption. At the end of the day, I think the tech is more than capable of adapting to a paradigm shift away from email for content consumption.</p>
</li>
<li>
<p>Could you instead change your response and feelings toward emails?</p>
<p>Yes, this would be a pretty good solution. However, I don't feel it is anywhere near as straightforward! Using an RSS reader app has had the same outcome in next to no time. Also, no matter how zen I would like to be, there will be occasional periods where I find email slightly stressful.</p>
</li>
</ol>
<p><strong>Tips for a newbie from a newbie</strong></p>
<ul>
<li><a href="https://netnewswire.com">NetNewsWire</a> is an excellent RSS reader for iOS and MacOS. It does many things very well, but there are plenty of alternatives if it is not to your taste.</li>
<li>Use folders to categorise your feeds. You can even create and use a probation folder for content you've just come across and are unsure whether you will continue reading. Go nuts.</li>
</ul>
<p><strong>Bonus: my current favourite feed</strong></p>
<p>Tangle, by Isaac Saul available at <a href="https://www.readtangle.com">https://www.readtangle.com</a>.</p>
<blockquote>
<p>We are a non-partisan politics newsletter that summarises the best arguments from the right and the left on the news of the day. We're 100% independent and ad-free, with no investors and only reader support.</p>
<p><strong>Why Tangle?</strong></p>
<p>Because you probably hate the news. And I don't blame you. Political news is broken in our country: Just 13% of Americans have a &quot;great deal&quot; of trust in what they read in the papers, watch on television or hear on the radio. For the first time ever, fewer than half of Americans trust traditional media. That number only goes down when you narrow the focus to politics, and the credibility of news organisations continues to plummet every day.</p>
<p>In today's political discourse, the most popular thing to do is to elevate the worst arguments the other side is making and then eviscerate them. The tactic is used across politics, partisan media outlets and it is employed religiously by political pundits. Americans from the right and left think negatively of people with different political views than them because all they see are the worst actors on the other side. Additionally, most political reporting today has a slant, lacks context, lacks transparency or fails to answer fundamental questions that readers want to know.</p>
<p>We're trying to fix this.</p>
</blockquote>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>Traditional mailing lists, where you <em>might</em> actually want to take action don't quite fit this. For example, emails from your local council or organising groups. These can be time-critical but not always, and you may choose to reply or engage, or you may not and the content is purely informative. <a href="#fnref1" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
]]></content:encoded>
    </item>
  
    <item>
      <guid>https://jknlsn.com/posts/2022-03-31-fun-with-lifx-lights</guid>
      <title>Fun with LifX lights and Python</title>
      <description>When I want to kick off more of a retrowave feel for a late-night coding session, I run this script, and my office lights then oscillate through the same colour scheme as the lights on my keyboard.</description>
      <link>https://jknlsn.com/posts/2022-03-31-fun-with-lifx-lights</link>
      <pubDate>Thu, 31 Mar 2022 09:19:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>I quite like my LIFX lights. I went a long time without seeing much benefit to smart lights, but now I love them.</p>
<p>When I want to kick off more of a retrowave feel for a late-night coding session, I run this script, and my office lights then oscillate through the same colour scheme as the lights on my keyboard.</p>
<pre class="language-py"><code class="language-py"><span class="token keyword">from</span> time <span class="token keyword">import</span> sleep

<span class="token keyword">from</span> lifxlan <span class="token keyword">import</span> LifxLAN
<span class="token comment"># from lifxlan import BLUE, CYAN, GREEN, LifxLAN, ORANGE, PINK, PURPLE, RED, YELLOW</span>

<span class="token keyword">def</span> <span class="token function">hsv_to_hsbk</span><span class="token punctuation">(</span>h<span class="token punctuation">,</span> s<span class="token punctuation">,</span> v<span class="token punctuation">)</span><span class="token punctuation">:</span>
    hsbk <span class="token operator">=</span> <span class="token punctuation">(</span>
        <span class="token builtin">int</span><span class="token punctuation">(</span>h<span class="token operator">/</span><span class="token number">255</span> <span class="token operator">*</span> <span class="token number">65535</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
        <span class="token builtin">int</span><span class="token punctuation">(</span>s<span class="token operator">/</span><span class="token number">255</span> <span class="token operator">*</span> <span class="token number">65535</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
        <span class="token builtin">int</span><span class="token punctuation">(</span>v<span class="token operator">/</span><span class="token number">255</span> <span class="token operator">*</span> <span class="token number">65535</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
        <span class="token number">3500</span>
    <span class="token punctuation">)</span>

    <span class="token keyword">return</span> hsbk


<span class="token keyword">def</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
    num_lights <span class="token operator">=</span> <span class="token number">3</span>

    lifx <span class="token operator">=</span> LifxLAN<span class="token punctuation">(</span>num_lights<span class="token punctuation">)</span>

    <span class="token comment"># Get devices</span>
    group <span class="token operator">=</span> lifx<span class="token punctuation">.</span>get_devices_by_group<span class="token punctuation">(</span><span class="token string">"Office"</span><span class="token punctuation">)</span>

    colors <span class="token operator">=</span> <span class="token punctuation">[</span>
        hsv_to_hsbk<span class="token punctuation">(</span><span class="token number">14</span><span class="token punctuation">,</span> <span class="token number">222</span><span class="token punctuation">,</span> <span class="token number">242</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
        hsv_to_hsbk<span class="token punctuation">(</span><span class="token number">233</span><span class="token punctuation">,</span> <span class="token number">218</span><span class="token punctuation">,</span> <span class="token number">217</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
        hsv_to_hsbk<span class="token punctuation">(</span><span class="token number">180</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">233</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
        hsv_to_hsbk<span class="token punctuation">(</span><span class="token number">205</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
        hsv_to_hsbk<span class="token punctuation">(</span><span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">220</span><span class="token punctuation">,</span> <span class="token number">201</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
    <span class="token punctuation">]</span>
    <span class="token comment"># colors = [RED, ORANGE, YELLOW, GREEN, CYAN, BLUE, PURPLE, PINK]</span>

    group<span class="token punctuation">.</span>set_power<span class="token punctuation">(</span><span class="token string">"on"</span><span class="token punctuation">)</span>

    duration <span class="token operator">=</span> <span class="token number">15</span>

    transition_time_ms <span class="token operator">=</span> duration<span class="token operator">*</span><span class="token number">1000</span>

    <span class="token keyword">while</span> <span class="token boolean">True</span><span class="token punctuation">:</span>
        <span class="token keyword">for</span> color <span class="token keyword">in</span> colors<span class="token punctuation">:</span>
            group<span class="token punctuation">.</span>set_color<span class="token punctuation">(</span>color<span class="token punctuation">,</span> transition_time_ms<span class="token punctuation">,</span> <span class="token boolean">False</span><span class="token punctuation">)</span>
            sleep<span class="token punctuation">(</span>duration<span class="token punctuation">)</span>


<span class="token keyword">if</span> __name__ <span class="token operator">==</span> <span class="token string">"__main__"</span><span class="token punctuation">:</span>
    main<span class="token punctuation">(</span><span class="token punctuation">)</span>

</code></pre>
<p>You could change the colours to the built-in colours from the LifXLAN library or any you want. Just get the HSV values. I pulled the values straight out of the <code>keymap.c</code> file in the <a href="https://configure.zsa.io/moonlander/layouts/6DGVL/latest/0">source available from the Oryx site for my keyboard layout</a>.</p>
<p>Pretty cool.</p>
<p>PS: This isn't an ad but get in touch if someone at LIFX wants to hook me up with a referral code to drop here.</p>
<h2>References</h2>
<p><a href="https://github.com/mclarkk/lifxlan">lifxlan Python 3 module</a></p>
<p><a href="https://github.com/mclarkk/lifxlan/tree/master/examples">Examples, including rainbow.py</a></p>
]]></content:encoded>
    </item>
  
    <item>
      <guid>https://jknlsn.com/posts/2022-03-24-icloud-redflag-for-indie-developers</guid>
      <title>iCloud red flag for indie developers</title>
      <description>As a consumer, I love iCloud. One central storage for documents, photos and app data. What's not to love? As a developer, I'm much more wary.</description>
      <link>https://jknlsn.com/posts/2022-03-24-icloud-redflag-for-indie-developers</link>
      <pubDate>Thu, 24 Mar 2022 09:58:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>As a consumer, I love iCloud. One central storage for documents, photos and app data. What's not to love? It's not a perfect service by any means, but it's handy and just works for the most part. When I see an app using iCloud, I'm pretty stoked as a consumer. It often comes along with other positives in my eyes, such as not needing an account and a level of iOS focused app creation philosophy that I appreciate.</p>
<p>As a developer, the reasons above are why I want to use iCloud in my apps. If I like a feature as a user, that's one of the most important factors when deciding what to build. However, several areas present technical challenges and one factor that I consider a potential show stopper for an indie developer who is considering using iCloud.<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup></p>
<p>Much has been said about the technical difficulties and challenges with iCloud by those with greater insight than I, so I won't rehash that aspect. Instead, I want to highlight the potential effects on your indie developer business.</p>
<h2>Red flag - apps using iCloud cannot be transferred to another account</h2>
<p>As Billy Ocean eloquently put it, a <a href="https://music.apple.com/gb/album/red-light-spells-danger/366965770?i=366965795">red light spells danger</a>. This red flag indicates a threat to your potential indie app business.</p>
<p>The <a href="https://help.apple.com/app-store-connect/#/devaf27784ff">App Transfer Criteria</a> list the requirements for an app to be able to be transferred to another account, which would be the case if you wanted to sell the app.</p>
<blockquote>
<p>No version of the app can use an iCloud entitlement.</p>
</blockquote>
<p>This is where it starts to get a little complicated for indie developers.</p>
<p>If you're only intending to ever build the one app, this presents no problem as you can just sell the entire Developer Account. So for your first app, no real problem. What about your second? Well, now it gets tricky. Using iCloud for more than one app in an account now means that selling any apps would require selling all of them.</p>
<p>We can take a look at my apps for a worked example. Currently, only one of my apps uses iCloud, my digital loyalty card wallet <a href="https://apps.apple.com/us/app/barcodes/id1610894014?uo=4">Barcodes</a>. I have two other apps, the intelligent music player <a href="https://apps.apple.com/us/app/mixtapes/id1571885606">Mixtapes</a> and my take on the word guessing genre <a href="https://apps.apple.com/us/app/word-game-hero/id1603845508">Word Game Hero</a>.</p>
<p>Current app portfolio state:</p>
<table>
<thead>
<tr>
<th>App</th>
<th>iCloud</th>
<th>Eligible for sale</th>
</tr>
</thead>
<tbody>
<tr>
<td>Barcodes</td>
<td><strong>Yes</strong></td>
<td>Only with account</td>
</tr>
<tr>
<td>Mixtapes</td>
<td>No</td>
<td>Yes</td>
</tr>
<tr>
<td>Word Game Hero</td>
<td>No</td>
<td>Yes</td>
</tr>
</tbody>
</table>
<p>So right now, <em>as long as only one app is using an iCloud entitlement</em>, then this can be managed. I'm not intending to sell any of my apps (although yes, Tim, for the right number that would change for the right buyer), but I could with a few steps if I did.</p>
<ol>
<li>Create a new account</li>
<li>Transfer Mixtapes and Word Game Hero to that account</li>
<li>Sell the account, now only containing Barcodes to the buyer</li>
</ol>
<p>Original account, now sold:</p>
<table>
<thead>
<tr>
<th>App</th>
<th>iCloud</th>
<th>Eligible for sale</th>
</tr>
</thead>
<tbody>
<tr>
<td>Barcodes</td>
<td><strong>Yes</strong></td>
<td>Only with account</td>
</tr>
</tbody>
</table>
<p>New account:</p>
<table>
<thead>
<tr>
<th>App</th>
<th>iCloud</th>
<th>Eligible for sale</th>
</tr>
</thead>
<tbody>
<tr>
<td>Mixtapes</td>
<td>No</td>
<td>Yes</td>
</tr>
<tr>
<td>Word Game Hero</td>
<td>No</td>
<td>Yes</td>
</tr>
</tbody>
</table>
<p>What if I added iCloud to Mixtapes? For example, to enable users to sync their mixes between devices or share them with other users.</p>
<p>More than one app with iCloud entitlement:</p>
<table>
<thead>
<tr>
<th>App</th>
<th>iCloud</th>
<th>Eligible for sale</th>
</tr>
</thead>
<tbody>
<tr>
<td>Barcodes</td>
<td>Yes</td>
<td>Only with account</td>
</tr>
<tr>
<td>Mixtapes</td>
<td>Yes</td>
<td>Only with account</td>
</tr>
<tr>
<td>Word Game Hero</td>
<td>No</td>
<td>Yes</td>
</tr>
</tbody>
</table>
<p>Now, to sell Barcodes, the buyer needs to also want Mixtapes. These are pretty different apps; that seems like it may be a harder sell! Not impossible; maybe a particular fruit company decides to make these default apps. This problem of finding a buyer for multiple apps continues to expand the more apps you have in your developer account that use iCloud.</p>
<!-- If you care about your users as well then it's more challenging than just from a business sense. Say I got a proposal from a company to buy Barcodes, and yes they are willing to buy the whole account but they intend to remove Mixtapes from sale as it doesn't fit their vision. -->
<p>Right there is the rub. It is possible to get around this, and it isn't too tricky. If you created a separate Apple Developer account for each app, you would never have this issue. If you ever want to sell an app, you simply transfer ownership of the Developer Account as a whole. This is costly, though, at 99 USD per year per account.</p>
<p>So before you first implement iCloud, you need to decide whether you want to add another 99USD yearly cost before knowing whether adding iCloud functionality will justify that cost. Maybe it will. Maybe that is just the cost of putting an app out there. However, the developer account may cost an indie developer hundreds of dollars before making a profit.</p>
<p>So now, an aspiring indie developer has choices to make when considering implementing iCloud features. The most future proof is to have an account for each app that would benefit from iCloud functionality, but this is the most costly. The developer could also choose to just have one account and not implement iCloud functionality to the potential detriment of users.</p>
<p>Why should iCloud entitlements have this impact? Are there technical reasons, privacy reasons, or anything else that I am missing or unaware of?</p>
<p>Surely Apple wants more developers to use iCloud for their apps. For a lot of use cases, it is a great solution. This limitation disincentivises indie developers from using iCloud.</p>
<p><strong>Summary</strong></p>
<p>iCloud entitlements making apps ineligible for transfer is a brake applied to indie developers. Apple should work to remove it to improve the ecosystem for both developers and users.</p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>There are alternatives to iCloud for user data. However, all of them have their own pros and cons, not least of which is that most require your users to have an account on a third party or your own service. iCloud, when functioning smoothly, lets this all happen invisibly to your users without the appearance of a separate service which I consider a huge benefit. <a href="#fnref1" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
]]></content:encoded>
    </item>
  
    <item>
      <guid>https://jknlsn.com/posts/2022-03-17-follow-up-questions-for-john-list-after-tim-ferriss-podcast</guid>
      <title>Follow up questions for John List after Tim Ferriss podcast</title>
      <description>I recently listened to the excellent and thought-provoking Tim Ferriss podcast with John List. Here are some of my thoughts and questions.</description>
      <link>https://jknlsn.com/posts/2022-03-17-follow-up-questions-for-john-list-after-tim-ferriss-podcast</link>
      <pubDate>Thu, 17 Mar 2022 09:15:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>I recently listened to the excellent and thought-provoking <a href="https://tim.blog/2022/01/28/john-list-transcript/">Tim Ferriss podcast with John List</a>. Here are some of my thoughts and questions. The episode is far-reaching, but the most interesting elements were the research conducted into Uber riders tipping behaviours.</p>
<p>From the UChicago news announcement:</p>
<blockquote>
<p>&quot;In addition, we were able to go beyond simple measurement and answer the 'whys' behind tipping. In so doing, we can provide a unique glimpse of social preferences in the field and provide insights into how norms and defaults work in tandem to change behaviors.&quot;</p>
</blockquote>
<ul>
<li>Are the 'whys' behind tipping in this paper generalisable even to other rideshare companies? John mentions in the episode that Uber implemented tipping in the wake of the #deleteUber campaign.</li>
</ul>
<p>From the podcast:</p>
<blockquote>
<p>I was the Chief Economist at Uber back in 2017. And TK, Travis Kalanick, came to me and said, &quot;John, you need to help us keep the drivers in Uber because there's this crazy &quot;Delete Uber&quot; campaign, #DeleteUber campaign, that's killing us on both the driver and the rider side.&quot; And my solution back then was, let's roll out tipping on the app.</p>
</blockquote>
<ul>
<li>
<p>How does the propensity to tip track with the sentiment on Uber in general? Could it be inversely correlated? I don't have sentiment data like this and couldn't find much online. However, I am sure that Uber can afford tools like <a href="https://www.brandwatch.com/products/consumer-research/">BrandWatch</a> or even have their own internal measuring and metrics. I looked up a few phrases in Google Trends, but I couldn't see anything too meaningful. It did show an expected <a href="https://trends.google.com/trends/explore?date=2016-01-06%202018-01-06&amp;q=delete%20uber">spike in searches for the term &quot;Delete Uber&quot;</a>, as John refers to.</p>
</li>
<li>
<p>How does tipping behaviour track with macro trends? Does this account for more variability than the differences observed with 5-star riders?</p>
</li>
<li>
<p>How was it verified that riders understood things the same way internal Uber staff did, like John and the team? For example, it was mentioned that riders don't get asked to tip until the driver has already rated them. I understood this to be implying that it was not affecting outcomes; however, John and other Uber employees knew the exact workings through their employment. I've never worked with or for Uber, and I assumed that the drivers were asked to rate the rider after tips. This definitely impacted my inclination for tipping! Of course, stating that it is a study limitation is entirely valid. Field studies inherently expose these kinds of challenges.</p>
</li>
</ul>
<p>I'm not a data scientist by trade nor a researcher, so there may be inherent flaws in these questions that I am missing. When I listened to the podcast episode, I was so curious that I made notes and then tried to find answers in the published paper itself.</p>
<p>John, Tim, if you happen to read this and can answer any of the above or point me to some sources with more information, I would love to know more! If anyone has any insights on these questions, please get in touch and let me know.</p>
<p><strong>References and credits</strong></p>
<p><a href="https://bfi.uchicago.edu/wp-content/uploads/BFI_WP_2019128.pdf">The Drivers of Social Preferences: Evidence from a Nationwide Tipping Field Experiment Bharat Chandar, Uri Gneezy, John A. List, and Ian Muir</a></p>
<p><a href="https://news.uchicago.edu/story/nearly-two-thirds-uber-riders-never-tip-study-finds">Nearly two-thirds of Uber riders never tip, study finds</a></p>
<p>Photo by <a href="https://unsplash.com/@danielcgold?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Dan Gold</a>
on <a href="https://unsplash.com/s/photos/uber?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>
]]></content:encoded>
    </item>
  
    <item>
      <guid>https://jknlsn.com/posts/2022-03-10-my-ideal-barcode-wallet-app</guid>
      <title>My ideal barcode wallet app - an unsolicited app outline</title>
      <description>I recently started thinking about what my ideal barcode and QR code wallet looks like, to store supermarket loyalty cards, reward cards or my gym tag. This is my unsolicited barcode wallet app outline.</description>
      <link>https://jknlsn.com/posts/2022-03-10-my-ideal-barcode-wallet-app</link>
      <pubDate>Thu, 10 Mar 2022 08:45:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>I moved to the UK recently, and with that came the incredible variety of supermarkets to choose from. Being somewhat inherently lazy, or maybe efficient, I just pick the closest and go there 99% of the time. That nearest store just so happens to be a Tesco, which heavily encourages using their loyalty card with discounted prices only available when you present your club card. I mean, I'm only human. I got the card and have been dutifully scanning it any time I will get a discount for doing so. Except for a slight difference, I have been showing the barcode on my phone using a popular wallet for store cards app. Now the user experience of this app grates on me practically every time I use it. This app grated on me enough that for about 8 weeks, I kept a note with my thoughts on what my ideal version of this category would look like.</p>
<p>I also recently came across <a href="https://hypercritical.co/2022/02/15/streaming-apps">John Siracusa's 'Unsolicited Streaming App Spec'</a>, and it really got me thinking about how I consider functionality and requirements. John's list comprises must-haves, the non-negotiable bare minimum. I realised that I had been writing a less eloquent version of this for a different category of apps. It is also reasonably opinionated, so unlike John's great streaming app spec, I don't think mine can be considered generalisable, just my ideal for this category. So without further ado, here is my unsolicited barcode wallet app outline.</p>
<h2>Displays barcodes and QR codes well</h2>
<p>This is table stakes, to the point of being blindingly obvious. Showing codes is not too complex, but there are a few complexities to doing so <em>well</em>.</p>
<p>The code display should be large, bright and legible to give the scanner the best chance of reading it successfully. My ideal barcode app will support this by brightening the screen when a store card is displayed. Naturally, the app will return to the previous brightness when the store card is closed or if the app goes into the background.</p>
<p>My ideal barcode app will rotate the card and corresponding barcode if needed. A subtle cue can be used to detect this; if the device is physically rotated. It's so subtle that it is easy to overlook, but the user rotating the device will likely indicate that you should rotate the content.</p>
<h2>Adding cards is easy</h2>
<p>I want the ability to add cards whether they are sitting in front of me or I have a screenshot or photo already stored. The app should attempt to detect a name or title in an image where feasible. I should be able to add more than one image from my library at a time, for example, if I am migrating screenshots from another app or I have a bunch of photos of physical cards from an old wallet.</p>
<h2>Is privacy-friendly</h2>
<p>Even using a loyalty card gives the supermarket or operator a lot of data! I understand this is actually more or less the motivation of supermarket loyalty and rewards programs. Less so for my friendly baristas and their punch card program. To my lovely local baristas, don't worry, you are not who I am referring to (and I'll see you soon!). I don't want my barcode wallet app tracking me on top of what the card issuer is already doing, whether across the internet or physically.</p>
<h2>Must work across devices (including Apple Watch and widgets)</h2>
<p>I don't always have my phone on me when I go for my quarterly run, but I always wear my Apple Watch. So when I grab snacks at Sainsbury's on the way back, I want to be able to get them for a discount.</p>
<p>To be completely honest, having a widget is more fun than strictly practical. It is helpful, though, because it means that I don't even need to open the app in some instances but can throw my home screen under the scanner. An intelligent implementation would use the Siri suggestions feature in WidgetKit to rotate the card to the top of the stack, but more on this later.</p>
<h2>Stores data</h2>
<p>An account should be optional, as I don't want to actually send the contents of my wallet to any external party. Not because I don't like the companies running other apps also getting those sweet, <em>sweet</em> spud discounts at Tesco, but because I don't want these companies or developers to aggregate and sell this data. This ties into my standpoint on maximising privacy.</p>
<p>Without a separate account, I think the best way to store data for a user and share this data between devices is iCloud. The standard disclaimers apply: iCloud is imperfect and has its own challenges. So best, not perfect. Still, compared to having another account and sending the data to another company or developer, iCloud fits my requirements profile best.</p>
<h2>Is <em>somewhat</em> smart</h2>
<p>It is handy if a wallet app can suggest a card for you right as you intend to use it. Whether that is on the lock screen, at the top of search results or in Siri suggestions. Existing apps on the market approach this in many ways, ranging from not trying at all to requesting permanent location access to detect when you are at a store.</p>
<p>As a blanket rule, I will not give an app access to my location data full-time. The rare exceptions I make are for apps where this is fundamental, like maps apps. Otherwise, I am very rarely convinced that there is a compelling reason to give an app that much data, not when there is so much evidence individual location data is collated and sold to be aggregated with data from other sources. Call it old-fashioned, but I am becoming a bit of a stickler for essential privacy.</p>
<p>So my ideal barcode wallet app will implement smart features where possible by leveraging the systems already built into iOS. This is where the italics in smart come into play, as I know that Siri is far from perfect. However, it offers several advantages, notably that the app developer doesn't need to track my location; Siri can do so instead. This approach completely bypasses that location data trust problem; the developer never receives my location data. A developer can just build the app to tell Siri when the user is using a card, and Siri will figure out the rest. I've found this isn't perfect, but it's still pretty damn good.</p>
<h2>Summary of my ideal code wallet app</h2>
<ul>
<li>Displays barcodes and QR codes</li>
<li>Brightens the screen when displayed, return to original afterwords</li>
<li>Rotates code when the device screen is rotated</li>
<li>Adds a card from the camera and automatically detect the barcode</li>
<li>Adds a card from an image in the photo library, automatically detects the barcode or QR code, and <em>tries</em> to detect a name</li>
<li>Is privacy-friendly</li>
<li>Can batch add cards by adding multiple images at once</li>
<li>Has an Apple Watch companion app</li>
<li>Has widgets that can show cards</li>
<li>Stores data (in iCloud)</li>
<li>Integrates with Siri suggestions to surface cards at learned times and locations</li>
</ul>
<h2>Barcodes</h2>
<p>If you know me well, you may already suspect the not so surprise ending.</p>
<p>I built the user-focused barcodes app that I wanted to use, and it is <a href="https://apps.apple.com/us/app/barcodes/id1610894014?uo=4">available today on the App Store</a>. For anyone thinking that the name Barcodes is a considerable stretch and wondering how I came up with it, it came to me in a dream.</p>
<p>It does all of the above requirements so far, and on the roadmap are things like adding from extension, sharing your barcodes, exporting barcodes or QR codes as an image and more.</p>
<h2>Advertising and monetisation</h2>
<p>One area that I must admit is not 100% user-focused is the ad display for free users. (Is monetisation ever able to be entirely user-focused? I'd love to know for sure.) An ad will pop up just once every 24 hours and obscures the screen as it displays. Unfortunately, this means that if you have opened the app via a widget or Siri shortcut, it will open to the barcode, then shortly after be obscured by an ad. This is not an ideal user experience, but I am trying to balance building a really great app with sustainably funding development. However, users can decide to pay for the Unlimited version via either subscription or once off payment. In that case, the ads disappear, you're able to select all app icons, and then the app user experience is 100% user-focussed. Yes, Barcodes isn't completely free, and some competitors are. The critical difference is that when you pay for Barcodes, you know that you are the consumer paying for the product with your money rather than with your data. People and teams trying to make money through software often choose to do so via charging the consumer directly or making money from selling the ability to advertise to the user or the user's data. Usually, the last two are combined to such a degree that most advertising online relies on invasive amounts of user data and tracking. Barcodes' business model attempts to give users the option to pay for the app directly if they find the value proposition compelling while monetising free usage via privacy-friendly advertising.</p>
<h2>Summary</h2>
<p>Barcodes is my newest iOS app which lets you scan and store your physical reward cards, or any other kind of code, into a digital wallet. You can scan and store QR codes or barcodes from either your camera or photo library. Perfect if you were keeping these cards in your photos or are migrating from a previous digital wallet app. You can display these codes on your phone, watch or even in a widget on your home page. Your cards are stored securely and privately into your iCloud storage and syncs between devices. You can store up to 10 cards for free on the privacy-friendly ad-supported free tier or upgrade to Barcodes Unlimited for an ad-free experience and unlimited card storage.</p>
<h2>Download now</h2>
<p>In your local stores now, available everywhere iOS apps are sold!</p>
<p>Links to various iOS app storefronts:</p>
<p><a href="https://apps.apple.com/us/app/barcodes/id1610894014?ct=jknlsn.com">Barcodes on the App Store</a></p>
<p><a href="https://apps.apple.com/us/app/barcodes/id1610894014?ct=jknlsn.com">iOS App Store: Barcodes</a></p>
<p><a href="https://apps.apple.com/us/app/barcodes/id1610894014?ct=jknlsn.com">The Apple App Store presents: Barcodes</a></p>
]]></content:encoded>
    </item>
  
    <item>
      <guid>https://jknlsn.com/posts/2022-03-03-app-review-reform</guid>
      <title>A request and proposal for App Review Reform</title>
      <description>I want to see App Store Reform and I've got one idea in particular that I kept coming back to. The aim of this idea, and what I want to see most, is the implementation of an App Review process that accomplishes the goals of keeping the App Store high quality, safe and user friendly while giving developers a clearer path to success. My idea for reform? Apple Jury Duty.</description>
      <link>https://jknlsn.com/posts/2022-03-03-app-review-reform</link>
      <pubDate>Thu, 03 Mar 2022 08:45:00 GMT</pubDate>
      <content:encoded><![CDATA[<h2>App Review Reform (App Review Review?)</h2>
<p>I spent the last post expounding on a negative App Review experience. So in this follow-up, I answer the question; what App Review changes would I like to see?</p>
<p>I'll start by touching on an often mentioned approach that I am not sure is a silver bullet; Epic's case against Apple. As a developer and consumer, I don't understand Epic's argument for why they should be allowed to operate a competing store. To me, it seems like they argue that Apple's 30% fee is too high; however, Epic's 5% fee is just right. Epic seems to be trying to make the case that they should be given the right to compete in Apple's ecosystem; however, they should not be similarly required to allow alternative sellers on the Epic Store. As a developer, I don't have an issue with Apple's percentage cut per se. I have a problem with how difficult and opaque App Review can be. At the core of my doubt that this case is the solution is that every time I read about Epic vs Apple in court, it seems like Epic want to make more money from iOS first and foremost (which they are allowed to want!). This appears to be the actual cause, which is then packaged up as motivated by a purely altruistic drive to save consumers from big bad Apple. Epic is allowed to want to profit, of course, as is Apple, myself and anyone, but it doesn't seem that Epic are putting users or developers first. Epic's arguments in court come across as just a more PR friendly justification than pure profit. I understand companies simply doing what is best for profit, but my view is that the sweet spot is when what is best for revenue and best for users truly align.</p>
<p>A big part of the reason I currently develop solely for Apple platforms is the user-friendly focus of the App Store. I know that Apple profits from this enormously, but it is tough to argue they do provide a very consumer-friendly experience. Of course, the experience is not perfect, as there are tons of scam apps and the like that make their way through, but I still feel that Apple does right by the consumer overall. Epic's arguments to me tend to sound purely in their own interest, with consumer benefit tacked on nebulously at the end.</p>
<p>At the end of the day, I agree there are good consumer-based arguments for alternative App Stores and allowing sideloading. Although even if sideloading eventuates, I still want the App Review process to improve regardless. I find the most compelling argument is that Apple should not be able to control access to such a significant market share of a general-purpose computing device, not necessarily the fees. However, even if sideloading is implemented, it seems likely that the App Store will continue to hold a dominant percentage of the iOS market. In this presumably close future scenario of multiple ways to reach iOS users, then App Store Reform will still be vital for indie developers to have a chance at competing.</p>
<p>So to answer the question, what I absolutely do want to see is App Store Reform. I've got one idea in particular that I kept coming back to that I have idly considered while pondering if I will ever escape App Review Purgatory this last month. The aim of this idea, and what I want to see most, is to end up with an App Review process that accomplishes the goals of keeping the App Store high quality, safe and user friendly while giving developers a clearer path to success.</p>
<h2>Idea - Apple Jury Duty</h2>
<p>What immediately comes to mind when you read that? You've probably got the crux of it; I don't think it is a particularly complicated idea.</p>
<p>Rather than an App Review Board, what if there was instead an App Review Tribunal? Instead of being completely opaque and uncommunicative, what if there were set processes and procedures? What if, at the end of the day, the fate of your app on the App Store was decided by people who similarly have some skin in the game, not just nameless and faceless Apple employees? I am not intending to blame Apple employees; I just don't think that the system allows them to be effective in this role of ecosystem gatekeeper.</p>
<p>Alison Yates and Andrea Cull of Knitrino elucidate the impact that Apple's sole role as gatekeeper has on small businesses in their post <em><a href="https://knitrino.com/apple">Unraveling Apple</a></em>. Bringing fellow developers into an App Review Tribunal process would mean that Apple is no longer the sole gatekeeper.</p>
<blockquote>
<p><a href="https://knitrino.com/apple">When we started, we carefully weighed the risks and the threats to our business. Never did we consider that Apple would be the largest threat we faced</a>.</p>
</blockquote>
<blockquote>
<p><a href="https://knitrino.com/apple">Apple alone has the power to destroy our business - and any of the businesses on its platform</a>.</p>
</blockquote>
<p>As part of this tribunal and jury approach, there would need to be a selection process for App Review Jury. This in and of itself would be difficult, but for the sake of discussion, let's say that to be developer jury duty eligible, you would need to have published an app on the App Store and be an active developer program member. The case would also need to not involve a direct competitor or involve any other kind of conflict of interest. Picking a jury at random would likely keep the chances of this happening pretty low.</p>
<p>There would also need to be some kind of jury lead through the process, which would have to be an Apple employee. The App Review Tribunal's lead role would be to explain Apple's case for rejection and the process, and that would be it.</p>
<p>The App Review Tribunal's Judge would preside, the App Review team would provide the Prosecution's arguments, and the developer would necessarily lead their Defence. Following this, the jury would decide and present a recommendation to the Judge. At the end of the day, it is still Apple's hypothetical <em>internal</em> court, so I guess it would still need to be up to the Judge to accept the jury's finding. I am not a lawyer, but I am sure there are parallels to existing systems and ways to solve these problems.</p>
<p>As I write this, I realise more and more that I am just recreating and describing a transparent Apple App Review internal judiciary process with active developer participation.</p>
<h2>Potential impact</h2>
<p>Would this incentivise frivolous App Review rejection challenges? Maybe. So there would need to be a process to disincentivise numerous failed challenges. I doubt that Apple will take no action now if you continue to submit one appeal after another unsuccessfully, but a more transparent policy would be huge in this area. To be honest, transparency goes a long way to improving this experience for app developers. However, there are always downsides in that transparency can make things easier for people trying to game the system.</p>
<p>Does this stop scams from getting into the App Store? No. However, it may actually result in more getting kicked out. If Apple doesn't have to carry the full brunt of adverse reactions and can point to a more impartial process, scam apps may find themselves more likely to get kicked off the store, a massively positive outcome for everyone. A little scrolling through iOS developer Twitter will reveal that many indie developers are as outraged as anyone by the scams proliferating. <a href="https://twitter.com/keleftheriou">Kosta Eleftheriou</a> highlights some of these scams with such frequency you could almost set your watch to it.</p>
<p>What's in it for Apple? Well, better developer relations! Better outcomes and tangible anti-trust and anti-competition defences where Apple can claim they are no longer the sole gatekeeper of the App Store. I said it before, and I'll repeat it again; I have no issue with the percentage commission of revenue that Apple takes; I have a problem with the terrible processes and arbitrary business risk that indie developers currently face. A lot of the calls to break up Apple's control over iOS, to my layperson understanding anyway, hinge on this element of control and competition. Pricing is one aspect for sure, but access at all is the issue that concerns me far more. Implementing this suggestion would have a monetary cost, but I have no idea how it would compare to the cost of the current system. Ideally, the economic benefit to Apple is significantly greater than the cost, so in theory, consumers, developers and Apple all win.</p>
<p>What's in it for developers? Potentially everything. Well, 70% of it anyway. I find the impact of positive changes hard to overstate, both as I see the influence on myself and the effect alluded to by other indie developers. Look at <a href="https://twitter.com/Kidmar">Marcus</a>' experience, and it is easy to deduce that if App Review improved, through this idea or any other, the experience of developing for Apple would be far less painful.</p>
<blockquote>
<p><a href="https://twitter.com/Kidmar/status/1496601751100796939?s=20&amp;t=IEdqJTh6AAE7RXDZHq_FKA">App Store Review can be so cumbersome and inconsistent. I could fill books about it. Usually it‘s wild interpretations of arbitrary rules which in the end cost a lot of effort, nerves, time and ultimately money.</a></p>
</blockquote>
<p>Do I know if this idea would work? No. Are there smarter people who can immediately point out the existential holes in the idea? Probably. However, I haven't seen it suggested, and I find it an interesting thought experiment to play with. How different would an indie developers App Review experience be in this scenario? Heck, how different would a major developer's experience be in this scenario?</p>
<h2>Hypotheticals</h2>
<p>To use a recent example very close to me, if Word Game Hero was indeed a copycat, then other indie developers are going to see that and vote to kick it out. Alternatively, if seen as a fairly created original remix of a concept (as so many apps are at the end of the day!), this hypothetical indie jury would decide that I should carry on as you were. Of course, this hypothetical App Review Tribunal could not and should not impact the separate legal processes such as trademark claims, which obviously supersede any App Review mechanisms. There are also numerous challenges, like how would you ensure that apps are adequately considered? Much like real-world jury duty, there would need to be guidelines, processes and rules.</p>
<p>I have not taken as close inspiration from other properties for my other projects. I now have a lingering concern that arbitrary similarity will pause anything I do next. I am of the school of thought that <a href="https://www.everythingisaremix.info">Everything is a Remix</a>. This means that everything could be argued to be a copycat if you took a hard-line approach with blurred and indistinct boundaries. So what about my new app, <a href="https://barcodesapp.com">Barcodes</a>, which has just been submitted for review? There are already barcode and QR code storage apps, so are my unique differentiators enough? Or take <a href="https://mixtapesapp.com">Mixtapes</a>, my unique multi-queue smart music player. At the time of writing, I know no other music app that allows you to have multiple queues. However, you could say that Mixtapes is simply the same concept as the Apple Music app with more features if I was to be deliberately reductive. Sure, there are a few new features, but the basic functionality is the same as the Music app. A month ago, I would have scoffed at these examples and thought this was a deliberately hyperbolic take until Apple's App Review team made a very similar statement about Word Game Hero. Would an independent App Review Tribunal have come to the same conclusion?</p>
<h2>Conclusion</h2>
<p>I don't think the current status quo is healthy or sustainable for the Apple developer ecosystem. <a href="https://twitter.com/bhansmeyer">Becky Hansmeyer</a> expressed this sentiment in a way that really resonated with me on Twitter:</p>
<blockquote>
<p><a href="https://twitter.com/bhansmeyer/status/1449762244804423682">The problem isn’t that the App Store is a walled garden, it’s that Apple is a crappy gardener. It lets weeds proliferate and has no tolerance for interesting new flowers.</a></p>
</blockquote>
<p>If you agree that Apple needs to implement major App Review Reform, I would love to hear it on Twitter or wherever you are online. Do you agree with the idea of Apple Jury Duty? Do you have loads of reasons why it wouldn't work? Do you have your own suggestions? If you use the hashtag <a href="https://twitter.com/search?q=%23AppReviewReform">#AppReviewReform</a> I will keep an eye on them and try to reply.</p>
<p>Let's ask Apple for App Review Reform to make a better Apple ecosystem that works with and for developers.</p>
]]></content:encoded>
    </item>
  
    <item>
      <guid>https://jknlsn.com/posts/2022-02-24-app-review-purgatory</guid>
      <title>Reflecting on 26 days in App Review Purgatory</title>
      <description>Recently my game Word Game Hero spent 26 days unable to get an update approved, and I received notice my app would be removed if unable to comply with vague guidelines. This felt like an Apple version of purgatory.</description>
      <link>https://jknlsn.com/posts/2022-02-24-app-review-purgatory</link>
      <pubDate>Thu, 24 Feb 2022 09:33:00 GMT</pubDate>
      <content:encoded><![CDATA[<h2>I escaped from App Review Purgatory. AMA.</h2>
<p>My first update to Word Game Hero which would eventually be rejected was submitted on the 16th of January. I submitted approximately 15 builds in between that submission and the one which was approved on the 11th of February. During this time I felt as if it was an unending, completely opaque process, and one in which redemption and escape seemed like a hope dangled just out of reach, unattainable.</p>
<p>This near month long process caused me to really heavily consider a lot of aspects of attempting to make a living selling iOS apps. I follow Apple and iOS developer related news relatively closely, but I have never considered issues of trademark and App Review to this extent. They never impacted me directly until now. There are those with far more pressing concerns, but I found the month very stressful.</p>
<p>Certain thoughts kept swirling around my head. What was going to happen? Not just to Word Game Hero, but to Mixtapes? Where is the line? Is my developer account in its entirety at risk if I keep disputing this? I thought I had a right to dispute this, can disputing it now be seen negatively? Needless to say, these weighed on my mind and I found the process tough.</p>
<p>Here are my reflections, which I have attempted to corral into a somewhat sensible order.</p>
<h2>How did this all start?</h2>
<p>I was introduced to Wordle via Twitter at the end of December, actually via one of the many implementations that took the core game mechanics but made changes allowing you to play more than one game a day. I quickly fell for the game, hard, playing not only the daily Wordle, but the unlimited versions far more often. I thought about what I would want to add to the game or change, and set about to create my own word guessing game with the same core mechanics, but including my own twists and additions.</p>
<p>This culminated in Word Game Hero. I released the game just before (days before at best!) many others did so, eventually drawing a lot of attention to the genre. A number of people commented on certain attempts to capitalise on Wordle's popularity, taking exception to specifics on Twitter, leading <a href="https://daringfireball.net/2022/01/apple_app_store_world_ripoffs">John Gruber to highlight the issue on Daring Fireball</a>. Following this Apple pulled what seemed like a large number that they decreed to be outright clones or misleading, although Apple alone know how many they truly removed from the App Store.</p>
<p>Word Game Hero survived this first purge, and had the honor of being specifically called out as not a clone in John Gruber's follow up piece, <a href="https://daringfireball.net/2022/01/five_letter_word_for_ripoff">A Five-Letter Word for ‘Rip-Off’</a>.</p>
<p>Meanwhile I am full of ideas. Buzzing. My partner commented that she had never seen me so energetic on a project. It had hit a nerve with me, where I had so many ideas on how to build a game that I would love, and I hoped others would too. From fun easter eggs to additional game play mechanics and more I was coding like a person possessed. In the week since my game was released I had released 10 updates, from adding clues a few hours after the initial release, to a popular word toggle to allow tweaking the difficulty.</p>
<p>Next up was adding localisation and game play modes, based on user feedback and my own ideas. I also had started to receive bug reports, detailing problems with crucial functionality too. Users statistics were completely wrong, and it was impossible to unlock letter difficulties after 4 and 5 letters. These bugs needed to be fixed fast, but were luckily very simple. Right here is where I started running into invisible walls.</p>
<h2>Building</h2>
<p>First up, bug fixes. Embarassingly trivial to fix, I pushed a build fixing these and nearly as soon as processing finished submitted for review. No problem, I'll keep working.</p>
<p>Second, localisation. Wouldn't it be great if users around the world could see the instructions and UI in their own language? I haven't worked up to puzzles yet in another language, but the UI seems like a great start. It opens up the market for the game a little, and it also adds an angle where users who are learning English may find Word Game Hero a fun supplement to their studies. Look, guessing words may not teach you English, but maybe it will be a more enjoyable way to test and reinforce learning. Factoring in the dictionary UI I had implemented that you can see after a game, it seemed like a match made in heaven. It took me a few days this time, but I got Word Game Hero localised into four or five additional languages (I forget exactly where in the process I added Hindi). SwiftUI made this fairly painless, but still time consuming. I figure out how to take screenshots for each language and now I am good to go. I'm now in the middle of my first App Review which has taken more than a day for this game, it has been &quot;In Review&quot; for a few days. I think to myself that it is a little strange, but nothing more of it. With my app Mixtapes I have had that happen before, so I just pulled it from review and submitted a new build. About an hour or two later the new build goes into &quot;In Review&quot;, which I think is great.</p>
<p>I was wrong. Multiple builds of Word Game Hero languished &quot;In Review&quot; until the 24th of January, when I received my first actual rejection.</p>
<h2>Rejection and appeals</h2>
<p>On the 24th of January I received my first actual rejection, declaring that Word Game Hero was in breach of <strong>Guideline 4.1 - Design - Copycats</strong>. I replied to the message in App Store Connect, and then also submitted an appeal.</p>
<p>The full text of guideline 4.1 is here, sourced from the review guidelines <a href="https://developer.apple.com/app-store/review/guidelines/">https://developer.apple.com/app-store/review/guidelines/</a>.</p>
<blockquote>
<p><strong>4.1 Copycats</strong></p>
<p>Come up with your own ideas. We know you have them, so make yours come to life. Don’t simply copy the latest popular app on the App Store, or make some minor changes to another app’s name or UI and pass it off as your own. In addition to risking an intellectual property infringement claim, it makes the App Store harder to navigate and just isn’t fair to your fellow developers.</p>
</blockquote>
<p>To cut a very long story slightly shorter, I don't believe that any version of my game can be called a copycat. However, Apple is entitled to disagree! What I take exception to is disagreeing with no details nor specifics of any kind.</p>
<p>This went back and forth in a rather frustrating manner, as I submitted new builds and 99% of the time they languished in review for multiple days. I had yet to realise that cancelling the submission was maybe hurting my chances, as it was (seemingly) going into a naughty pile which was slowing the review. In fact, referring to the dialogue as back and forth is disingenuous. The dialogue was entirely one sided in terms of meaningful discussion or communication attempts.</p>
<p>I would send a multiple paragraph defence of my game, and many days later receive the same message word for word as previously. Ignoring my requests for any clarification at all, or for a call to explain to me further. At this point, Wordle had yet to be mentioned as the game I was being accused of being a copycat of! Does that make sense to you? Here is a (very mildly!) exaggerated retelling, as I don't know whether it is kosher to share the actual messages.</p>
<blockquote>
<p>24/01/22 06:24 AM App Review: &quot;Your game is a copycat see guideline 4.2.1.&quot;</p>
<p>24/01/22 06:44 AM Jake: &quot;Look I don't think so and here's why. [Paragraphs of explanation]. Which game do you think it is a copycat of? Then I can show the specific differences, not just what I think is unique.&quot;</p>
<p>28/01/22 10:53 PM App Review: &quot;Your game is a copycat see guideline 4.2.1.&quot;</p>
</blockquote>
<p>After yet another build of version 1.2 was rejected, I received a second email and another message in App Store Connect, this time regarding version 1.1.2 which was the current version published on the store.</p>
<p>I was informed that version 1.1.2 had been <em>re-reviewed</em>, and was now retroactively deemed to be also in breach of the guidelines. Specifically guideline 4.1. Not specified was what I was being accused of being a copycat of. You can argue that it should be obvious, but given how many games were (and still are) on the store with far less differentiation than mine, I feel it should be specified at a minimum. Otherwise how do you possibly defend it? Catalog the differences between every game using the word guessing mechanic?</p>
<p>This is where things really ratcheted up in intensity for me, and stress. I've received no specifics at all on the copycat accusation and indictment, and now I have 14 days to somehow comply. The &quot;App Review Appeal process&quot; started to feel like a drawn out set up designed to guarantee failure, with the slightest hint of plausible deniability. I wrote a full <a href="https://wordgamehero.com/appeal">defence and comparison between my game and others at the time</a> which includes the main points that I made to App Review and the App Review Appeal Board. I also sent both these teams this content, both the link and printed out as a PDF, as an attempt at long form exposition. I continued every method I could think of to escalate and to get in contact with the App Review Appeal Board, and received nothing but communications that my case was in progress.</p>
<p>I finally received a call from someone to inform me of the outcome. Here is a rough excerpt of the actual conversation, where I was notified that my appeal was unsuccessful.</p>
<blockquote>
<p>App Review: &quot;I regret to tell you that your appeal is unsuccessful. Thank you for sending in all your evidence and those further details, those have been received and were reviewed by the App Review Appeal Board. I am not part of the board, I am just calling to give you the outcome.&quot;</p>
<p>Jake: &quot;Ah damn. Why was the appeal rejected, what were the reasons?&quot;</p>
<p>App Review: &quot;Your game was found to be leveraging the popularity of something else.&quot;</p>
<p>Jake: &quot;Are you referring to Wordle?&quot;</p>
<p>App Review: &quot;Yes.&quot;</p>
<p>Jake: &quot;Ah. Did you see all my differences? I listed them out in lots of the content I sent.&quot;</p>
<p>App Review: &quot;Yes we did.&quot;</p>
<p>Jake: &quot;That's still not enough? It is still being rejected for being a copycat?&quot;</p>
<p>App Review: &quot;Yes. Despite the clues, multiple letter games, unlimited puzzles, sharing and SharePlay, timed mode and practice mode the App Review Appeal Board have still decided that it is leveraging the popularity of something else.&quot;</p>
<p>Jake: &quot;... Wait you agree all of those are differences? Yet it is still a 'copycat'?&quot;</p>
<p>App Review: &quot;Yes. Your game was found to be leveraging the popularity of something else.&quot;</p>
<p>Jake: &quot;... Huh.&quot;</p>
</blockquote>
<p>From the above conversation, I have mostly cut out about 20 minutes of me begging, cajoling and desperately explaining my viewpoint and frustration. I also cut out my complaining about specific facets of the experience, such as the five day review times slowing down any chance I had to beat the countdown to app removal. The person on the phone was incredibly kind to mostly just listen, and I expressed multiple times that my frustration was not with them individually, but rather I found the policies and process incomprehensible. For example, why was my app not being approved while others with much less differentiation had been approved? The person I spoke to was compassionate and patient, and despite not being the outcome I was after was a very positive interaction.</p>
<p>I'll spare you the rest. What is crucial from this is what they didn't say, which in the end was my key to getting the game approved. From the list of differences to Wordle and any others, what the caller hadn't mentioned was the UI. So by deduction, if they agree with all the mechanics and gameplay differences, but don't mention the UI that must be it.</p>
<p>Once I hung up the phone I made some changes to the default colors and to the screenshots for the App Store, and added a textured background. I tweaked things like the shadows and shapes of the tiles, changing the shapes from square to round. My reasoning was that if Apple were agreeing to all the mechanics differences but still think it leverages the popularity of another game, then the remaining thing is the look. I fully concede that at a glance the game used to look like Wordle. So suspecting that this was the sticking point, but unfortunately not knowing, I addressed it head on. The settings to change the appearance had been there for a while, so it was simply a matter of changing the defaults. I also set the screenshots to default to dark mode to be further differentiated.</p>
<p>Once I had these changes built I resubmitted a few hours later. A few hours after that it went into review, and remained there for a few days. Then one morning I woke up and the sun was shining a little brighter, and I saw the email I had been waiting for since three weeks ago. The Word Game Hero version 1.2 submission was accepted for release on the App Store.</p>
<p>With this the key was turned, Word Game Hero version 1.2 was published, and I was released from App Review purgatory.</p>
<h2>Mistakes and learnings</h2>
<ol>
<li>Resubmitting instead of submitting a new build within the existing submission, closing the chat with App Review in App Store Connect.</li>
</ol>
<p>Once I resubmitted, the paltry little window to type a message to App Review disappeared.</p>
<p><strong>Don't</strong> cancel your submission!</p>
<p>Update the build or metadata as needed, and resubmit as part of the same submission. This <em>may</em> help you avoid the naughty queue reserved for miscreants and the damned.</p>
<p>Nowhere does it tell you explicitly not to cancel the submission, that you can just resubmit! In fact I thought that I had to resubmit, which I am unsure is how it used to be until the new submission process or just a misconception that I have always had.</p>
<ol start="2">
<li>You will never get specifics of a copycat rejection.</li>
</ol>
<p>Apple will never tell you &quot;x, and y are too similar by our judgement, but yes a, b and c are fine&quot;. They seem to have an idea, but won't tell you this outright. This led to some hilarious conversations like the one described above, where I was laughing through tears of frustration.</p>
<p>A small part of me is sympathetic to this, and to the opaqueness of the whole process, as I can imagine that the more transparency there is the easier it is to abuse. However, as an indie developer <strong><em>trying</em></strong> to play within the rules, it feels like I am being blindsided by a monolith which refuses to speak to me.</p>
<p>In the end, it felt like my only option was to resubmit blindly, hoping that this time I had narrowed down exactly what the issue is and it would pass, while simultaneously worrying that this would be held against me.</p>
<ol start="3">
<li>A trademark claim is not needed for Apple to decide that you are &quot;leveraging the popularity of another app&quot;.</li>
</ol>
<p>I fully support the rights of IP owners and trademark owners, however I don't think Apple should be proactively deciding what is a trademark or copyright violation and what is not, except for the most blatant of cases.</p>
<p>Once my app had no mention of any others in the name, metadata, app store description or even in Settings, why should Apple decide unilaterally that it looks too similar? If Wordle decide that, there are legal processes for them to take, and trademark claim procedures within the Apple ecosystem too. However, I have the right of reply in those scenarios and this is a crucial difference. When App Review decided that my game was in breach, it very much felt like I had no right to dispute this or to dialogue. This is a huge problem for a storefront of its size. It also just simply shouldn't be the experience that Apple wants indie developers to have. I am a huge believer that the more indie apps and developers the better, and Apple adding invisible hoops to jump through is to their own detriment as much as to developers.</p>
<h2>Conclusion</h2>
<p>I found this whole process incredibly trying, as I would if you asked me to navigate a room I had never seen before while blindfolded. What poured salt in the wound was rewatching videos from WWDC about how to approach App Review, and hearing things along the lines of &quot;if we do find an issue with your app, we will work with you to resolve it&quot;. I would love that! I was basically begging for that every other day for three weeks, and all I got was variations of &quot;your App Review/Appeal is in progress and if the team need anything further they will contact you&quot;.</p>
<p>That said, the one human interaction I had was very kind and genuinely took my many concerns on board, which I greatly appreciate.</p>
<p>I don't view this as a failure of any individuals. I don't resent the App Review teams for doing their jobs, following processes, procedures and guidelines. I view this as indicative that App Review itself is a broken and haphazard process, with glaring areas for improvement.</p>
<p>So what would I like to see change?</p>
<p>Tune in next week to find out.</p>
]]></content:encoded>
    </item>
  
    <item>
      <guid>https://jknlsn.com/posts/2022-02-17-minimum-viable-blog</guid>
      <title>Minimum Viable Blog</title>
      <description>Publishing the first post on this site has me thinking about what I want to see from a blog in the year 2022. This post was initially titled Best in Class Blog, but perhaps best in class is too high a standard.</description>
      <link>https://jknlsn.com/posts/2022-02-17-minimum-viable-blog</link>
      <pubDate>Thu, 17 Feb 2022 08:12:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Publishing the first post on this site has me thinking about what I want to see from a blog in the year 2022. This post was initially titled &quot;Best in Class Blog&quot;, but perhaps best in class is too high a standard. I think &quot;Minimum Viable Blog&quot; better encapsulates my current goals.</p>
<p>As a developer first and a writer somewhere significantly further down the chain, I also find this easier to ponder than the somewhat more difficult questions of what I should write about, how often, and why.</p>
<p>Here are the things that I want my site to have as a minimum from a reader perspective. These come mainly from what I want to see when reading content, and nothing more complex or scientific than that.</p>
<ol>
<li>RSS feed</li>
</ol>
<p>RSS is fantastic. For several reasons. In my opinion, the best advantage is the power and control it gives the reader to consume the content they choose on their terms. Updates are delivered as you write them, bypassing engagement algorithms. RSS is pretty darn good.</p>
<p>There are a ton of amazing RSS apps out there, but the one I am using currently is <a href="https://netnewswire.com">Net News Wire (More news, less junk. Faster.)</a>.</p>
<blockquote>
<p>&quot;NetNewsWire shows you articles from your favourite blogs and news sites and keeps track of what you’ve read.</p>
<p>This means you can stop going from page to page in your browser looking for new articles to read. Do it the easy way instead: let NetNewsWire bring you the news.</p>
<p>And, if you’ve been getting your news via Facebook — with its ads, algorithms, user tracking, outrage, and misinformation — you can switch to NetNewsWire to get news directly and more reliably from the sites you trust.</p>
<p>Take back control of your news. With free, high-quality, native apps for Mac and iOS.&quot;</p>
</blockquote>
<p>For this site, I adapted the instructions posted by Riccardo Bevilacqua on <a href="https://riccardo.codes/posts/how-to-create-an-rss-feed-in-nextjs-10">riccardo.codes</a> as I am using Next JS and Tailwind CSS, but there are many ways to do this.</p>
<ol start="2">
<li>Dark mode friendly</li>
</ol>
<p>I blame learning to code. Dark mode in IDE's and terminals ruined me. However, I have recently seen the light. After being a long time dark side only user, I have now rejoined the light side during the hours between dawn to dusk. Funnily enough, what flipped the switch was a few instances of creating UI's that just didn't work half as well in light mode in my iOS apps, and I decided that the best substitute for rigorous testing is just using your apps in both light and dark mode frequently. This brings me to my point, that if your site is blindingly white when a user has dark mode enabled, then you may not have a good excuse for burning your readers' retinas. As I type this out I realise I need to implement this before I publish, I've painted myself into a corner here. I stand by it though, a responsive dark mode is relatively achievable with most modern frameworks and a nice touch. Don't annoy your users by blinding them immediately. Annoy them the old fashioned way, with your writing.</p>
<p>For this site I learned from the example posted by Avneesh Agarwal on <a href="https://javascript.plainenglish.io/how-to-create-light-and-dark-mode-toggle-in-next-js-with-tailwind-61e67518fd2d">javascript.plainenglish.io</a>, the <a href="https://tailwindcss.com/docs/dark-mode">Tailwind dark mode documentation</a> and the <code>prefers-color-scheme</code> documentation at <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme">Mozilla</a> to create a solution I like.</p>
<ol start="3">
<li>Sane preview</li>
</ol>
<p>The year is 2022. I kind of think everything should have a preview at this point, right? Unless the site explicitly requires not having a preview, maybe to avoid spoilers? Look, that seems very niche. For the most part, I want everything I receive to show me a preview, a short description and all that good stuff. How else will I know whether I genuinely want to open that link that was unceremoniously dumped into the group chat with no context? If you create a sane preview, then you have given your readers a minimum of context if they are unlucky enough to have your content dumped on them without warning.</p>
<!-- 4. Accessible -->
<p>I hope that my choices to implement these make the reading experience better for you, as they do for me. If there are things that could improve it further, please let me know!</p>
]]></content:encoded>
    </item>
  
    <item>
      <guid>https://jknlsn.com/posts/2022-02-10-taking-a-break-from-social-media</guid>
      <title>Why I stopped using Facebook, Instagram and LinkedIn</title>
      <description>Today I took a break from using Facebook, Instagram and LinkedIn. Why? They just sucked. For me. I have wonderful friends on each platform, my connections aren't the reason. The algorithms are.</description>
      <link>https://jknlsn.com/posts/2022-02-10-taking-a-break-from-social-media</link>
      <pubDate>Thu, 10 Feb 2022 09:12:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Today I decided to take a break from using Facebook, Instagram, and LinkedIn. Why?</p>
<p>They suck. Over time my experience has become far more negative than positive.</p>
<p>I have great friends on each platform, so I don't think my connections are to blame. I suspect that the nameless, faceless algorithms determining what I see on each platform are the root cause. It is no longer worth wading through all the garbage on these sites just to see what my friends are occasionally doing. Maybe it's my fault that somehow these platform's algorithms are insanely efficient at showing me things that get a rise out of me. Perhaps I need to become more Zen and not react, and then the algorithms would not have had the data. I could specify what this looks like for each platform, but honestly, if you try and imagine something that annoys you when you see it on one of these sites, you probably already have an idea in mind.</p>
<p>I'm not in any way better than social media; I am just sick and tired of these platforms. So I still plan to be active on Reddit and Twitter.</p>
<p>Twitter and Reddit are no better in terms of content or sheer vitriol. In fact, I would say they are often worse. I have had far more negative reactions to things I've posted into the wilderness of these two sites from strangers than from my friends on the sites I have taken a break from today. The difference between Twitter and Reddit and the others I mention is that there are tools available to control my feed and what I see. With third-party clients like <a href="https://apps.apple.com/app/tweetbot-for-twitter/id1527500834?ct=jknlsn.com">Tweetbot</a> or <a href="https://apps.apple.com/app/id979274575?ct=jknlsn.com">Apollo</a> I can decide the content of my feed, rather than algorithms that make money from me being <s>enraged</s> &quot;engaged.&quot; That gives me a level of control over the experience so that it is still positive. I'm engaged because I see things I want to see and am interested in, not because I see content that has been calculated to make me as mad as possible.</p>
<p>Now I may change my mind in the future, so I didn't delete the accounts. However, I did set a banner and a profile picture telling people I was taking a break. If someone wants to reach me, they can call me, and I'll do the same. For reference, the banner looked pretty similar to this.</p>
<p><img src="https://jknlsn.com/assets/blog/2022-02-10-why-i-stopped-using-facebook/example.png" alt="How the banners looked on my social media pages"></p>
<p>I'm going to start posting and writing here occasionally instead. I don't know yet what I will write about, or how often, or really much of anything.</p>
<p>You can email me at this domain to get in touch or call me.</p>
]]></content:encoded>
    </item>
  
      </channel>
    </rss>
  