<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Learned Late</title>
    <link>https://www.learnedlate.com</link>
    <description>Essays on living abroad, money, building, coffee and thinking.</description>
    <language>en</language>
    <lastBuildDate>Thu, 29 Oct 2026 00:00:00 GMT</lastBuildDate>
    <atom:link href="https://www.learnedlate.com/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Is roasting coffee at home worth it? What 130 roasts taught me</title>
      <link>https://www.learnedlate.com/writing/who-roasts-at-home</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/who-roasts-at-home</guid>
      <pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate>
      <description>On a Kaffelogic Nano 7e, the Filter B and E profiles plus copying good roasters' green beans took me from mostly faulty roasts to none, at about 40% less than a specialty subscription. So why didn't my friend want to try it?</description>
      <content:encoded><![CDATA[<p><em>(I haven&#39;t fallen in love with roasting coffee. I do it because it&#39;s cheaper.)</em></p>
<p>I used to think roasting coffee at home was insanely difficult. Eight months or so and 130 roasts later, I&#39;m getting really good coffee out of a small fluid bed roaster on my bench, for about 40% less than a specialty subscription. I explained all of this to a friend, and his eyes didn&#39;t light up.</p>
<p>This is an edited interview: the questions are there to push me, the answers are what I said, with the filler cut.</p>
<p><strong>The short version</strong></p>
<ul>
<li><strong>Roaster:</strong> a Kaffelogic Nano 7e, a fluid bed roaster that does about 100 g per batch.</li>
<li><strong>What fixed my roasts:</strong> the Filter B and Filter E profiles, plus copying the green beans good roasters buy. From March to June, 68 to 80% of my tasted roasts were faults. In September and October, none.</li>
<li><strong>Cost:</strong> about 40% cheaper than Rocket Coffee at $26 for 250 g.</li>
<li><strong>The catch:</strong> it still takes discipline. Sourcing greens, resting and degassing, roasting on time.</li>
</ul>
<p><img src="https://www.learnedlate.com/images/writing/who-roasts-at-home/1.webp" alt="A cupboard shelf of glass jars of home-roasted coffee, each labelled with a batch number and date on masking tape"></p>
<h2>Why roast coffee at home at all?</h2>
<p>I did this mainly out of curiosity, and because I found out there are fluid bed roasters that make the whole process simple, and they&#39;re small enough to have at home. I did not know that at first.</p>
<p>When I explained it to my friend, my pitch was: I&#39;m saving money. A bag from Rocket Coffee is 250 grams for $26. I can buy two kilograms of green beans, and even with the weight loss while roasting, I&#39;m probably saving 40% on the coffee itself. And I got to very similar results. It took me a while, because I was a total beginner, but now I&#39;m getting much closer, much faster.</p>
<p>But my cupboard is now full of different roasted coffees. You need to be quite disciplined, because the coffee needs to rest and degas, and you need to roast on time so you have it. You need to try out the different profiles. I&#39;m building software to assist me with that. It&#39;s not a super easy process. It requires effort and dedication, and it almost has to be a bit of a hobby.</p>
<p>So take someone who pays a bit more for a good electric grinder and uses a V60 with a temperature-controlled kettle. Would they get into roasting, to save money or experiment with flavour? Or would they rather pick a good roaster and a subscription? Even if we can make it really simple and easy, would people want to do it?</p>
<img src="https://www.learnedlate.com/images/writing/who-roasts-at-home/2.webp" alt="A 1 kg bag of Vanguard Coffee Co green beans from Brazil, a fermented natural Arara" width="381" />

<h2>Would you still roast if green beans cost the same as a subscription?</h2>
<p><em>Your pitch was money, but everything you describe sounds like a hobby.</em></p>
<p>If they would cost exactly the same, I probably wouldn&#39;t be a roaster.</p>
<p>I loved the Rocket subscription. It was a nice little surprise that I&#39;d get every other week, with really, really good coffee. Roasting at home, you need to think about sourcing the greens. You buy them, you roast them, and you&#39;ll have a couple of throwaways.</p>
<p>And it adds to the list of variables. Brewing itself with a V60 is hard enough. You need to control the water temperature, the grind size, the pour structure, the agitation. Add degassing and the roast parameters, and it gets so much harder to get a good cup.</p>
<p>So if a roaster produces really good coffee at the same cost as the green beans, I&#39;d go with the roaster and get it delivered to my door. But because it&#39;s so much cheaper, I&#39;m willing to go through the iterations. My hope is that over time I collect enough data and enough of the process that I end up roughly where the roasters are. It&#39;s just cheaper.</p>
<h2>Is home roasting still cheaper once you count everything?</h2>
<p><em>The roaster, the batches that didn&#39;t work, the planning, the hours on the software. Where does it break even?</em></p>
<p>I haven&#39;t counted that. The time you can&#39;t count.</p>
<p>Building the software is more the hobby. The challenge right now for me is: can I figure out how to roast coffee in a way that it becomes easy, and that I can enable someone else to do it?</p>
<p>I guess I haven&#39;t fallen in love with roasting coffee. I don&#39;t sit there and watch the color change and take it out at the right time. That&#39;s more like an art someone needs to learn, and I&#39;m not sure I&#39;m willing to learn it. I&#39;m probably more interested in drinking the good coffee.</p>
<p>The throwaways, maybe. But I never actually throw anything away. Sometimes it&#39;s just not as good. What I&#39;ve recently figured out is that I&#39;ve got a profile now, and if I do well on selecting good green beans, which I&#39;m getting better at, I&#39;m producing more and more really good coffees. Initially they weren&#39;t that good. I&#39;m figuring out the process, and I&#39;m turning it into software. That&#39;s really what&#39;s happening.</p>
<h2>Which Kaffelogic profiles finally gave you good coffee?</h2>
<p>My roaster is a Kaffelogic. The profiles that come with it are okay. They work for some beans. The same company makes the Nucleus Link, and they&#39;re quite secretive about those profiles. Through a glitch in their software, I was able to get access to them.</p>
<p>I don&#39;t know exactly what they do. I haven&#39;t even looked into them. But I heard someone on a podcast talking about them. They&#39;re more targeted at what you want: Filter B and Filter E are aimed at a lighter roast. I brew with a V60 and I like fruity coffees, so those two are now my default for almost everything.</p>
<img src="https://www.learnedlate.com/images/writing/who-roasts-at-home/3.webp" alt="A Kaffelogic Nano roaster on the bench next to a scale, a cooling tray and a jar of green beans" width="423" />

<p>Right now I&#39;ve got three coffees: a Colombian SL28, a Colombian Pacamara, and an Indonesian anaerobic natural from Finca de Berman, a grower I&#39;ve had before through Rocket Coffee. I ran them on Filter B and Filter E, and I&#39;m getting really close. Maybe Rocket is a notch better, or polishes out slightly more detail. But it&#39;s better than what I get from the Ozone coffee subscription. So I&#39;m levelling up through the better roasters in New Zealand.</p>
<h2>How do you pick green beans without knowing much about them?</h2>
<p>For the greens, I <a href="https://www.learnedlate.com/writing/copy-roasting-training-wheels">copy roast</a>. If I see a roaster has done one from Finca de Berman, that sounds good to me. If I&#39;ve liked an SL28 before and find one, that&#39;s good. If it&#39;s not the cheapest bean at the green supplier, I buy it. The pro roasters probably know all of that.</p>
<p>I&#39;m trying to turn it into a process: copy other roasters, stick to the two default profiles if you like lighter filter roasts, and run through them. And when a cup isn&#39;t right, I use the log to work out <a href="https://www.learnedlate.com/writing/roast-or-brew-who-do-you-blame">whether the problem is the roast or the brew</a>.</p>
<h2>Could a beginner skip the 130 learning batches?</h2>
<p><em>Your roast log shows the change. From March to June, most of your tasted roasts were faults. Since September, on Filter B and E, none were, and what&#39;s left is one click on the grinder. If someone started tomorrow with your two profiles and your rule for buying greens, which of those batches would they skip?</em></p>
<p><img src="https://www.learnedlate.com/images/writing/who-roasts-at-home/4.webp" alt="Chart: tasted roasts per month in 2026. March to June, 68 to 80% of tasted roasts were faults (sour, grassy, roasty, flat). After switching to Filter (B) and (E), 11% in July, 38% in August, 0% in September and October"></p>
<p>The 130 batches are a mix of a lot of lessons. I did roasts with too little beans, only 60 grams in the chamber. You can select that on the roaster, but it doesn&#39;t really work. And I wasn&#39;t always buying the right green beans. I&#39;ve gotten better at that.</p>
<p>So I&#39;m pretty confident that if someone buys a roaster like this, takes these two profiles, likes filter roasts, buys the right green beans and just chucks them in, they should be able to produce a really decent coffee. They don&#39;t need to watch the color change in the chamber or listen for first crack. The profiles are good enough to push it to a good result.</p>
<p>Kaffelogic is terrible with their own software, their own process and their own documentation. If that is taken away, it should actually be really easy for someone to get a good coffee within just five batches.</p>
<p><img src="https://www.learnedlate.com/images/writing/who-roasts-at-home/5.webp" alt="Diagram: what the process takes care of (watching the color change, listening for first crack, picking a profile, choosing green beans) and what's still on you (sourcing green beans, resting and degassing, roasting on time, ~100 g per batch)"></p>
<h2>So would people actually want to roast at home?</h2>
<p><em>That answers whether people can, not whether they want to. What did your friend say?</em></p>
<p>That&#39;s the problem. First of all, I don&#39;t know. That friend is pretty much the only one I know who likes specialty coffee and would spend money on a single origin at all. The others have some sort of automatic espresso machine at home, they buy blends, and all they care about is that it&#39;s Arabica, nothing else.</p>
<p>His eyes didn&#39;t necessarily light up. That was the whole reason I started this conversation.</p>
<p>I think it&#39;s really cool. You can save money and explore how to roast coffee. But I don&#39;t think there&#39;s anything I&#39;ll be able to explore with this coffee that the roasters can&#39;t. I&#39;ll never buy the same green beans as a top tier roaster and roast them slightly better. That will never happen.</p>
<p>So the only case is: can I do it cheaper? And even with the process, it comes down to a little effort. Once in a while you need to fill up the roaster with green beans, and you need to be disciplined enough to do it. Then you need to rest them. And the roaster only does about 100 grams, so you go through that quite quickly. Once I&#39;ve hit a good profile, I don&#39;t go off developing a different flavour either.</p>
<p><img src="https://www.learnedlate.com/images/writing/who-roasts-at-home/6.webp" alt="Diagram: the V60 already has water temperature, grind size, pour structure and agitation; home roasting stacks degassing and roast parameters on top"></p>
<p>So I think he found it interesting, but at the same time maybe also daunting, because of the whole process attached to it.</p>
<h2>Who is home roasting software for, then?</h2>
<p><em>You&#39;re building software to make roasting easy for a person you can&#39;t quite picture. Is this a pitch, or are you building it for yourself?</em></p>
<p>I&#39;m okay with leaving that open.</p>
<p>There are a lot of people in this world. A lot of them are in specialty coffee and already spend a lot of time on brewing, testing out the latest gear. Maybe my friend just isn&#39;t the right person for it.</p>
<p>I&#39;m getting search traffic around Kaffelogic profiles, so there must be some interest from people at home who want to do this and are trying to figure it out. Maybe a process is something that helps them. Maybe there&#39;s product-market fit for what I&#39;m building.</p>
<p>I don&#39;t know.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Roast or brew: who do you blame?</title>
      <link>https://www.learnedlate.com/writing/roast-or-brew-who-do-you-blame</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/roast-or-brew-who-do-you-blame</guid>
      <pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate>
      <description>When a home-roasted pour-over tastes off, it could be the roast, the brew or the green beans. Matt Perger's downward spiral, applied to home roasting, and why taking good notes by voice might be all a home roaster needs.</description>
      <content:encoded><![CDATA[<p>(Matt Perger&#39;s spiral, applied to home roasting and pour-over)</p>
<img src="https://www.learnedlate.com/images/writing/roast-or-brew-who-do-you-blame/1.webp" alt="Light-roasted coffee beans scattered on a white surface" width="355" />

<p>The first sip is really intense strawberry yogurt. The next part is a little bit astringent.</p>
<p>So how do you pinpoint that? Do you reduce the water temperature? Try a different grind size? Or is it the roast?</p>
<p>When you roast and brew your own coffee, there are so many things to blame and get right. It&#39;s never really that clear.</p>
<p>And if you pick the wrong one, the next cup can get worse.</p>
<h2>The spiral</h2>
<p>Matt Perger, the coffee guy from Australia, wrote a post called <a href="https://cargocollective.com/mattperger/filter/espresso/The-Downward-Spiral-of-Death">The Downward Spiral of Death</a>. It&#39;s about espresso. A barista relies only on their palate instead of measuring extraction, mistakes strength for body and sourness for acidity, and adjusts the wrong thing. With a roaster in the loop it gets worse: roast darker, pull shorter, repeat.</p>
<p>His fix is a refractometer. Measuring extraction, he writes, &quot;immediately points the finger of blame at the roaster.&quot;</p>
<p>I don&#39;t make espresso. I roast at home and brew pour-over, but I think the same thing happens there.</p>
<p>With my first set of beans I had so many iterations. I&#39;d go back and forth on different roast parameters and different brew parameters and never get to perfect, except maybe on the very last roast. It feels like I figured out the right recipe and the right roast almost by chance. Before that I was on the fence, thinking maybe the green beans just weren&#39;t that good (<a href="https://www.learnedlate.com/writing/copy-roasting-training-wheels">the bean sets the bar</a>).</p>
<p>So there are actually three suspects: the roast, the brew and the green itself.</p>
<p><img src="https://www.learnedlate.com/images/writing/roast-or-brew-who-do-you-blame/2.webp" alt="Diagram: green beans, roast and brew all feed into one cup, and the only readout is your tongue: really intense strawberry yogurt, then a little bit astringent"></p>
<p>I&#39;m not sure &quot;death spiral&quot; is even the right name for what happens at home. Sometimes it doesn&#39;t get worse. You decide &quot;that&#39;s maybe all the beans can do&quot;, stop pointing at the roast, and end up with an average coffee that a pro roaster could have turned into an amazing one.</p>
<h2>You forget</h2>
<p>The bigger problem for me is more basic.</p>
<p>With a bunch of different coffees on the shelf, you forget how you did it the last time and how it tasted the last time. You don&#39;t remember the parameters exactly. You just say &quot;this tastes sour&quot;.</p>
<p>On its own, that doesn&#39;t tell anyone much. Was I not grinding fine enough (<a href="https://www.learnedlate.com/writing/rediscovering-the-known-filter-coffee">too coarse is sour</a>)? Was the water too hot? The context is missing if you don&#39;t log every little bit down. That goes for me next week, and for an AI model planning the next roast.</p>
<p><img src="https://www.learnedlate.com/images/writing/roast-or-brew-who-do-you-blame/3.webp" alt="Diagram: the note "This tastes sour" on its own leaves grind size, water temp and how it was roasted as question marks; the same note stored with all three logged gives you something to compare next time"></p>
<p>Cupping at home used to mean post-its and notes. Really annoying.</p>
<h2>What you can actually control</h2>
<p>Logging doesn&#39;t make a hand pour repeatable. Unless you&#39;re in a scientific environment where the pour is the same every single time, you can&#39;t really reproduce it. Pour structure, a bit of accidental agitation, the water temperature, all of that kind of stuff moves.</p>
<p><strong>It&#39;s just the question of what you can actually control.</strong> You can&#39;t control everything, but maybe you can get better at this by just logging these few parameters.</p>
<p>Pros already do this. Professional roasters and green bean buyers have all these sheets and go through them meticulously: what it tasted like, how they roasted it, how they tried it. As a home roaster, you don&#39;t do that. It&#39;s too much work.</p>
<p>What changed for me is <a href="https://www.learnedlate.com/writing/my-daily-ai-stack-plus-better-coffee">voice to text</a>. I try one of the coffees, open AI on my phone and just talk about how I like it, walking around with the cup or sitting on the couch. The agent can file that into the right places: how I roasted it, and how it tastes over time. The next time I discuss how to roast, it pulls all of that back up (<a href="https://www.learnedlate.com/writing/77-roasts-later-vibe-roasting-my">77 roasts later</a> has the workflow).</p>
<img src="https://www.learnedlate.com/images/writing/roast-or-brew-who-do-you-blame/4.webp" alt="A voice-to-text note on my phone about a brew of roast 148, 15 g of coffee to 240 g of water: first sip almost like a strawberry yogurt, then a little bit astringent, maybe bitter. Below it, the agent using the Brewed Late tool" width="323" />

<p>It&#39;s the same idea, but cheaper.</p>
<h2>Not a substitute for measurement</h2>
<p>To be fair to Perger, a log isn&#39;t a refractometer. &quot;Strawberry yogurt, then astringent&quot; is still my tongue, written down.</p>
<p>I don&#39;t have a refractometer, and I don&#39;t want to buy one. They&#39;re expensive devices. If you can get one, I&#39;d recommend it to every home roaster. Maybe the pros need one, and they&#39;re on a different scale. But for a home roaster, maybe logging and taking good notes is all you need.</p>
<p>It doesn&#39;t fully solve the problem either. If a cup tastes like strawberry yogurt, I think you&#39;ve done a lot right and you&#39;re pretty close, so it&#39;s likely more the beans or the brew than the roast. That&#39;s a heuristic at best.</p>
<p>I don&#39;t have the perfect way to get to a perfect coffee. Collecting more data still seems better, and it helps shorten these iteration cycles.</p>
<h2>Not that hard</h2>
<p>Home roasting can be daunting. It certainly was for me. I thought this was something only professionals can do, and I never even thought of getting into it, because I didn&#39;t know you can buy these <a href="https://www.learnedlate.com/writing/the-home-roaster-business-case">little devices</a>. They&#39;re not that expensive.</p>
<p>Roasting a good cup of coffee is actually not that hard. You can figure this out. With the right structure and processes, you get to a pretty good cup pretty quickly.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Copy roasting is the training wheels of home roasting</title>
      <link>https://www.learnedlate.com/writing/copy-roasting-training-wheels</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/copy-roasting-training-wheels</guid>
      <pubDate>Thu, 22 Oct 2026 00:00:00 GMT</pubDate>
      <description>80 roasts in, I still can't pick green beans. So I copy the specialty roasters who can, and built some tooling on Brewed Late to do it on purpose.</description>
      <content:encoded><![CDATA[<p>I&#39;m more than 80 roasts into my coffee roasting journey, and I&#39;m starting to see a pattern.</p>
<p>Some green beans are easy to get right, while others I struggle with getting decent at all.</p>
<p>My recent order of green beans got very close to perfect on the very first try.</p>
<img src="https://www.learnedlate.com/images/writing/copy-roasting-training-wheels/1.webp" alt="Opal Coffee green beans: Colombia, John Wilmer Cuellar, SL28 natural" width="293" />

<p>One thing I can confidently rule out here. It&#39;s not that I have figured out roasting. I still have no clue what I&#39;m doing, and I probably just got lucky in selecting the right roast profile.</p>
<p>Anyhow, this first try is so good it could have been from a professional specialty coffee roaster.</p>
<p>What I am uncovering here is what we in the software industry call shit in, shit out. If your data is garbage, you can run all sorts of fancy analytics on it, but it won&#39;t solve the underlying problem.</p>
<p>The same is true for coffee. As I&#39;m digging deeper into this, I honestly think that roasting is an amazing skill that requires a lot of time to master, but picking the right green beans might have the single biggest impact.</p>
<p>tldr. I think I got really lucky in picking the right beans.</p>
<h2>The bean sets the bar</h2>
<p>On a recent trip to Sydney, I was blown away by this coffee from Paradox (if it&#39;s called Wush Wush, it better be good). Batch brews are usually not as good as hand-poured, but this one was simply incredible.</p>
<p>I think the single reason is the green beans.</p>
<img src="https://www.learnedlate.com/images/writing/copy-roasting-training-wheels/2.webp" alt="Paradox Coffee Roasters limited release card: Colombia Wush Wush, Gasca Brothers" width="297" />

<p>If you brew with amazing beans, there&#39;s not that much you need to do to get a good cup. If the beans are average, you need to pay attention to everything — grind size, water temperature, agitation, all of it.</p>
<p>I think roasting works the same way. If you have truly amazing beans, roasting is simply trying to not lower that bar.</p>
<p>It might not be perfect, but it&#39;s likely going to be really good from the start.</p>
<h2>Doing it right by accident</h2>
<p>My own journey started with great beans, a Kenya Gatugi peaberry.</p>
<p>I knew what the beans were supposed to taste like. I got to try them on a <a href="https://rocketcoffee.co.nz">Rocket Coffee</a> filter coffee subscription.</p>
<img src="https://www.learnedlate.com/images/writing/copy-roasting-training-wheels/3.webp" alt="Rocket Coffee Kenya Gatugi Peaberry filter roast bag" width="338" />

<p>I found <a href="https://www.learnedlate.com/writing/the-home-roaster-business-case">the exact same green beans</a>, bought a second-hand roaster and just tried.</p>
<p>From the first attempt, the fruit was always in there. Then it took me a few attempts to figure out the roaster - wrong batch sizes (too little green in the machine, then too much), the wrong profile, not resting the coffee properly, not letting it degas.</p>
<p>I&#39;m still fighting some of the other bags from that first order. For months that had me wondering whether I&#39;d simply bought beans that weren&#39;t that great, or beans meant for espresso and darker roasts, where, at least in my opinion, the raw quality matters less.</p>
<h2>What I did differently</h2>
<p>So for the second order I did a bit more research. Not much, though. I looked for two things:</p>
<ol>
<li>Not the cheapest beans.</li>
<li>Beans harvested not too long ago. I asked about harvest dates.</li>
</ol>
<p>I ended up with a Colombian from Opal Coffee, a different green supplier than John Burton, where my first order came from. The first three brews were really good, so I roasted the next batch with the same settings.</p>
<p>It could be the two rules, or Opal just being more focused on specialty coffee than my first supplier. I don&#39;t know, and one good batch won&#39;t tell me.</p>
<p>What I do know is that I have no clue about green bean purchases.</p>
<p>I didn&#39;t pick the Gatugi either. Rocket&#39;s green buyer did, and I bought the same lot.</p>
<h2>Training wheels</h2>
<p>I&#39;ve made my peace with that, because borrowing someone else&#39;s selection seems to work pretty well.</p>
<p>I call it copy roasting: find out what your favourite roasters are releasing as filter coffee, source the same green beans and roast them yourself.</p>
<p>It&#39;s a bit like training wheels on a bike. You learn to keep a little bit of balance, and over time you figure out how to ride.</p>
<p>The other way to start is to buy a 2kg bag of green beans that doesn&#39;t taste good, throw it away or lose interest, and go back to your Rocket Coffee subscription. It&#39;s a lot easier to stick with home roasting if you get a little bit of help at the start.</p>
<p>So copy roast as long as you can.</p>
<p>You drink good coffee the whole time, and if you take notes and pay attention to how they source, you learn a ton along the way.</p>
<p>At some point you still have to take the training wheels off, and that takes some adjustment. But the leap to doing it yourself isn&#39;t that hard.</p>
<h2>Where it falls apart</h2>
<p>It only stops working when your roaster has a lot you can&#39;t find anywhere else.</p>
<p>That&#39;s interesting too, though. Maybe I just don&#39;t know all the suppliers yet. Or maybe the lot only comes in 10kg minimums, and I don&#39;t drink 10kg a year.</p>
<p>There might be a business problem in there: a group of home roasters pitching in to share a lot.</p>
<h2>Copy roasting with data</h2>
<p>The other thing I&#39;ve done to cover up for my green bean ignorance is build some tooling on <a href="https://brewedlate.com">Brewed Late</a>.</p>
<p>The first one tracks which months each country harvests its coffee, and when roasters in New Zealand and Australia actually have those coffees on the menu. It&#39;s my &quot;harvested not too long ago&quot; rule, with some data behind it.</p>
<p><img src="https://www.learnedlate.com/images/writing/copy-roasting-training-wheels/4.webp" alt="Brewed Late: harvest months vs when AU/NZ roasters have each origin on the menu"></p>
<p>The second one I&#39;m more excited about.</p>
<p>It&#39;s the lot overlap: which green supplier carries which lot, and which specialty roasters sell that same lot roasted.</p>
<p><img src="https://www.learnedlate.com/images/writing/copy-roasting-training-wheels/5.webp" alt="Brewed Late copy-roasting map: green suppliers matched to the roasters selling the same lots"></p>
<p>Find a roaster you like, see what they&#39;re roasting, check if a green supplier has the same lot, buy it.</p>
<p>That&#39;s what I did with the Gatugi, just without the tool.</p>
<p>My next green bean order is the real test. Before I buy, I&#39;ll check who else stocks the beans and which specialty roasters in NZ and Australia have roasted them.</p>
<p>I still haven&#39;t figured out how roasters actually pick their beans.</p>
<p>Until I do, I&#39;ll keep copying. Worst case, I drink coffee I already know I love, for a lot less money.</p>
<p>You can only win with that.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Building got so fast the real work is idea generation</title>
      <link>https://www.learnedlate.com/writing/building-got-so-fast-the-real-work</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/building-got-so-fast-the-real-work</guid>
      <pubDate>Fri, 21 Aug 2026 00:00:00 GMT</pubDate>
      <description>If an idea that took two days might now take two hours, building stops being the bottleneck. As a solo founder, I'd need to spend more time generating ideas.</description>
      <content:encoded><![CDATA[<p>Picture a software engineer working on his startup in the year 2020.</p>
<p>Say he has about four new ideas on what to build per week. Implementing these new ideas varies, but let’s say it takes, on average, two days.</p>
<p>Within five workdays, our founder will have created about eight workdays of things to do (two days per idea, four ideas per workweek).</p>
<p>That’s a healthy cycle, and our founder will continue to build and come up with new stuff.</p>
<p>Zip forward to 2026. Agentic coding &amp; loops are the norm.</p>
<p>Our founder still has four new ideas per week, but implementing them might only take two hours each. So within a day, a week&#39;s worth of ideas will have been implemented.</p>
<p><img src="https://www.learnedlate.com/images/writing/building-got-so-fast-the-real-work/1.webp" alt="Diagram “The bottleneck inversion”: execution-bound 2020 versus idea-bound 2026"></p>
<p>In 2020, implementation was the bottleneck. Today, creating new ideas is.</p>
<h2>Flow used to be the job</h2>
<p>Back in 2020, when I would implement a new feature, I’d be in a deep flow state, constantly thinking about how to solve a specific coding problem.</p>
<p>There wasn’t ever any waiting. I was the bottleneck.</p>
<p>New ideas would come in various ways: customer feedback, research, thinking, but I’d say the rate of these new ideas was and is pretty static.</p>
<p>It doesn’t matter when the next idea pops up - mid-coding, after shipping a new feature, or in the shower. What matters is the clock.</p>
<p>If four ideas a week each take a long time to implement, time itself will provide more things to work on.</p>
<p>You’re busy for months. In those months you still get more ideas at roughly that same weekly rate. So you never run out. You’re always slightly behind a backlog that grows while you build.</p>
<p>Well, not anymore.</p>
<h2>Flipped ratio</h2>
<p>This isn’t something that just impacts solo founders like myself.</p>
<p>I can imagine the same thing happening in any sort of software development-related business.</p>
<p>You have a Product Manager (PM) responsible for creating an idea, fleshing it out and prioritising it. Usually you’d have one of these and several developers to implement the ideas.</p>
<p>Say that ratio was 1:5. I can’t imagine it being at that level anymore. I don’t know where it is exactly, but I could imagine it being somewhere like 0.5:1, where in extreme cases, you have more PMs than developers (<a href="https://www.ycombinator.com/library/Mf-andrew-ng-building-faster-with-ai">I’m not the first to notice this</a>).</p>
<p><img src="https://www.learnedlate.com/images/writing/building-got-so-fast-the-real-work/2.webp" alt="Diagram “The flipped team ratio”: traditional 1:5 PM to developers versus AI-era 0.5:1"></p>
<p>This then pushes the bottleneck upstream at an organisation level, just like it pushes up the problem for me personally.</p>
<p>If an entire engineering org starts running out of backlog, it’s easy to see why a solo founder - who is PM and the engineering team - hits the same wall.</p>
<p>I don’t currently have great insights into larger organisations, so all I can do is focus on myself and the view I have on solo founders.</p>
<h2>Backlog implemented by lunchtime</h2>
<p>A typical day for me will start with reviewing customer feedback. This results in a new feature or a bug to be fixed. Since this is my highest priority, I do this first thing. <a href="https://www.learnedlate.com/writing/how-i-code-today">But with automation</a>, this doesn’t usually take that much actual doing.</p>
<p>So by midday, these high-priority things are off the table. This process will happen a couple of times a week.</p>
<p>Come afternoon, there is not much backlog left; everything has been implemented.</p>
<p>In 2020, I didn’t have to worry about deliberate idea generation. The fact that it took so long to implement meant it was never a problem. The process of sitting down to find new ideas, for me, is undefined.</p>
<p>I never needed it, yet now I feel like I need to spend more time on deliberate idea generation.</p>
<h2>Where ideas actually come from</h2>
<p>Ideas can come from a lot of places, such as exploring other products, talking to customers, or idling, as in not being distracted</p>
<p>For me, the customer channel is already maxed. Every second I get, I’m using. There just isn’t enough volume yet to keep my backlog filled.</p>
<p>Maybe I’m only seeing a small part of the picture because I don’t have product-market fit with a ton of customers leading the way and telling me what to build.</p>
<p>In general, I feel like ideas can’t be forced. If you push and think about these ideas too hard, they often don’t come.</p>
<p>When you idle and are not distracted, however, things seem to pop up.</p>
<p>But that’s not the natural path for someone who is used to grinding through a backlog.</p>
<p>On top of that, stepping away to be undistracted feels like not working.</p>
<h2>The guilt of not looking busy</h2>
<p>Personally, if I don’t spend my workday in front of the computer pushing, building, doing, I feel guilty of not having given it a good go.</p>
<p>But sometimes that might be what is required. Sometimes to think, process and get a view from a higher vantage point, one needs to step away and actually idle.</p>
<p><img src="https://www.learnedlate.com/images/writing/building-got-so-fast-the-real-work/3.webp" alt="Quadrant chart “Active work vs idle yield” plotting physical screen time against high-leverage output"></p>
<p>By idle, I don’t mean watching YouTube or scrolling Twitter. I think what is needed is true downtime away from the computer and phone.</p>
<p>The new bottleneck might look like not working: a walk, reading a book, or taking the kids to the beach.</p>
<p>When I think about it, it makes sense. The cost of execution drops so much that the only way to differentiate is that high-value work of seeing the big picture.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Deterministic vs. agentic controlled Ai workflows</title>
      <link>https://www.learnedlate.com/writing/deterministic-vs-agentic-controlled</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/deterministic-vs-agentic-controlled</guid>
      <pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate>
      <description>I moved my SEO workflow from a script I control to an agent using deterministic tools, because I'm not an SEO expert. Here's what changed.</description>
      <content:encoded><![CDATA[<p><a href="https://www.learnedlate.com/writing/automate-marketing-automate-anything">When I started working on SEO</a>, I focused on the workflow aspect.</p>
<p>I figured out the different steps, e.g., finding keywords that rank highly, creating an article, linking to others, etc.</p>
<p>All of that went into a simple UI. Click a button for keyword research. Click another to check click-through rates. Tell the agent exactly what to look for, then let it run the path I’d already decided.</p>
<p><img src="https://www.learnedlate.com/images/writing/deterministic-vs-agentic-controlled/1.webp" alt="Terminal task dashboard menu for selecting a project such as Brewedlate or Days to Expiry"></p>
<p>This was great and saved me a lot of time, but left blind spots.</p>
<p>Setting a predefined pathway doesn’t allow for the creative exploration that the latest models excel at. I had agentic steps, but the workflow was controlled by a script.</p>
<p>If the path is deterministic, <strong>you</strong> have to already know what matters. You have to be the expert who designed the checklist. I’m not an SEO expert.</p>
<p>So instead of following my script, I had more and more cases where I went off script to ask an agent on the side to fix or review an issue.</p>
<p>I’d drop into the command line and just ask the agent, sidestepping my own process, because the agent is better at SEO than I am.</p>
<h2>Letting the expert take over</h2>
<p>The problem with starting from the agent is that it can create a lot of mess. Just try to prompt your way to a solution without bringing in some structure; it’s guaranteed to be a chaotic dumpster fire.</p>
<p><a href="https://www.instagram.com/p/DTvfd5mDPlz/">Instagram post</a></p>
<p>So the tradeoff is clear. Mess or blind spots from not being an expert at what you&#39;re doing. I’m not an expert.</p>
<p>I always jumped to the conclusion that I need to create more articles targeting more keywords.</p>
<p>But letting the agent lead, it quickly realized that I’ve got a ton of these keywords already and suggested not going broader but deeper. Stop cannibalizing my own content.</p>
<p>Many articles on the same topic, all compete for the same top slots on Google.</p>
<p>So I went and merged those individual articles into stronger ones with a stronger proposition, helping be improve clicks and impressions of my sites.</p>
<h2>Toolbox and structure</h2>
<p>Here’s where my thinking shifted: the tools weren&#39;t the problem, but how I controlled them was. Instead of running a rigid script myself, I built structure directly into the tools and skills, then gave the agent autonomy.</p>
<p><img src="https://www.learnedlate.com/images/writing/deterministic-vs-agentic-controlled/2.webp" alt="SKILL.md file for a weekly-seo skill open in an editor with invocation instructions"></p>
<p>Article writing is a great example of how this works:</p>
<ul>
<li><p><strong>Tools handle the deterministic bits:</strong> Pull keyword candidates, package content briefs, run structural checks (headings, link validation, word count), and separate publishing into a deliberate step.</p>
</li>
<li><p><strong>Skills handle the writing structure:</strong> Differentiate from existing content, ensure brand voice, drop real internal links, and cut out filler.</p>
</li>
</ul>
<p>The agent still writes, but the skill is what keeps it from turning into a chaotic dumpster fire.</p>
<p>By exposing these tools via MCP or CLI, the workflow shifts from step-by-step commands to goal-oriented delegation: <em>“Improve the site’s SEO.”</em> The agent uses deterministic tools to execute, while taking on the creative job of exploring unknown unknowns.</p>
<h2>Incorporate blindspots into the workflow</h2>
<p>This process will occasionally uncover issues such as cannibalisation or a missing llm.txt to target AI-SEO.</p>
<p>You can now do a one time fix, but my general approach is to then make this part of the tool and skill workflow. I create a check and a pathway to keep it under control as part of the workflow.</p>
<p>This is where the agent isn’t as good. It will go and get creative and explore but will also get overwhelmed and forget stuff.</p>
<p><img src="https://www.learnedlate.com/images/writing/deterministic-vs-agentic-controlled/3.webp" alt="Terminal weekly SEO report with a summary, completed work and decisions needing input"></p>
<p>That keeps creativitiy and process in balance. It has tools to check for cannibalization directly, but keeps the door open to uncover other things.</p>
<p>Whether codified checks become the next set of blind spots is honestly still something to monitor long term.</p>
<p>One approach could be two separate agent tasks so you don’t bloat the context: first go through the known deterministic steps and clean everything, then a second, looser, non-deterministic pass.</p>
<h2>Autopilot</h2>
<p>With tools and skills a lot of this runs automatically, scheduled via cron job, so I only need to jump in if a decision is needed.</p>
<p><img src="https://www.learnedlate.com/images/writing/deterministic-vs-agentic-controlled/4.webp" alt="macOS menu bar dropdown listing Reddit, video and SEO tasks with their pending decisions"></p>
<p>Like this things easily scale and I can run 5 or more projects at the same time.</p>
<p><a href="https://www.pageseeds.com/">Everything I add to the CLI</a>, then scales. If I figure out a new way to promote pages to agents, the next scheduled run will take care of that.</p>
<p>At this stage, because I’m really not an expert on this, I mostly go with the agent’s guidelines. My human-in-the-loop step across the projects is checking Google Search Console and how impressions and clicks are improving over time.</p>
<p>Of course that’s quite lagging. Weeks, if not months, until you see results. But that’s kind of the only way SEO works.</p>
<p>No human in the loop? I don’t give up anything by running it like this.</p>
<p>Yeah I could read up and take more control, but I have other things to do. So without the agent I wouldn’t have been successful with SEO at all. I’ve grown it up to around 600,000 impressions for multiple sites. I get thousands of clicks. To some degree what I’m doing has proven to work. And without running it this way I wouldn’t have been able to run it at all, because I don’t know how this works.</p>
<p>I watched one video once where a guy was talking about automating SEO workflows.</p>
<p><img src="https://www.learnedlate.com/images/writing/deterministic-vs-agentic-controlled/5.webp" alt="Tweet about replacing a marketing team with AI agents showing two men on a video call and a keyword dashboard"></p>
<p>Using Ahrefs to find low keyword difficulty, high search volume long-tail keywords and target them in an article (<a href="https://www.learnedlate.com/writing/automate-marketing-automate-anything">here’s my breakdown</a>).</p>
<p>Everything else I figured out on my own. Interlinking. Not cannibalizing articles. All of that through agentic discovery.</p>
<p>Not all is perfect yet. <a href="https://www.daystoexpiry.com/">Days to Expiry</a> has been flatlining on impressions, but I’ve learned to focus more on click and you can see the blue line slowly grinding up.</p>
<p><img src="https://www.learnedlate.com/images/writing/deterministic-vs-agentic-controlled/6.webp" alt="Google Search Console performance chart with 3.06k clicks, 1.37m impressions and average position 7.6"></p>
<p><a href="https://brewedlate.com/">Brewedlate</a> grinding upwards in a rather short timeframe too.</p>
<p><img src="https://www.learnedlate.com/images/writing/deterministic-vs-agentic-controlled/7.webp" alt="Google Search Console performance chart with 457 clicks, 109k impressions and average position 14"></p>
<p>Setting up agentic workflow can be done either way. Controlled by an agent or controlled by a script. For this creative process here, where I’m not an expert, agentic is the way to go for me.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Rediscovering the known: being a generalist</title>
      <link>https://www.learnedlate.com/writing/rediscovering-the-known-being-a-generalist</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/rediscovering-the-known-being-a-generalist</guid>
      <pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate>
      <description>I'm an Eierlegende Wollmilchsau, the German egg-laying wool-and-milk pig. A few months of job hunting showed me why generalists struggle with classic roles.</description>
      <content:encoded><![CDATA[<p>I often joke that I can do everything, but I’m good at nothing.</p>
<p>This joke is less of a joke if you measure it by how easy it is to find a classic job.</p>
<p>I am rediscovering being a generalist.</p>
<h2>The Eierlegende Wollmilchsau</h2>
<p>There’s a German phrase for this:</p>
<p><strong><a href="https://de.wikipedia.org/wiki/Eierlegende_Wollmilchsau">Eierlegende Wollmilchsau</a></strong>. The egg-laying-wool-and-milk-producing-pig.</p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-being-a-generalist/1.webp" alt="Eierlegende Wollmilchsau – Wikipedia"></p>
<p><em>Eierlegende Wollmilchsau: egg, wool, milk, pig — all in one.</em></p>
<p>A mythical creature that does everything.</p>
<p>I think I am that animal.</p>
<h2>How you end up here</h2>
<p>In hindsight, it’s clear. I was jumping all around, never quite specialising.</p>
<p>I started in the SAP area and grew into range rather than depth: solution architect, development consultant, always switching between business and technology.</p>
<p>When you realise you like connecting the dots across tech, people, and business more than staying in one lane, starting something yourself feels like a logical next step.</p>
<p>So I started a business. Starting a business is pretty much exactly what a generalist does, or should be doing. Ambiguity, no clear playbook, figuring it out, selling, building, talking to customers.</p>
<p>After that, the business got acquired, and I worked as a CTO, then started something new.</p>
<p>A few bootstrapped apps later, I’ve been paying the bills myself for about a year and a half, dipping into savings, but not breaking even.</p>
<p>Since I left the corporate world, I always had this backup plan in the back of my head:</p>
<p><strong>If startups don’t work, I can always go and find a job.</strong></p>
<h2>What the market looks like</h2>
<p>I’ve been looking for jobs for a few months now.</p>
<p>Result? Not a lot of interviews. Not a lot of replies. Not much progress.</p>
<p>If I look at classic roles - backend engineer, enterprise architect, staff engineer - I’m unlikely going to win those. Not because I have no experience, but because I don’t have the depth.</p>
<p>A company looking for a hardcore backend engineer with 15 years of experience will prefer the person with 12 years of exactly that over the person with 20 years of “I can figure it out.”</p>
<p>They don’t need a pioneer; they need someone who has depth.</p>
<p>The roles that do get a reply are rare.</p>
<p>It will include something like this: Startup founder mentality, zero-to-one, build a new capacity inside a larger business.</p>
<p>In other words: the Eierlegende Wollmilchsau.</p>
<p>There just aren’t many of those listings. And there is no clean job description that says: we’re looking for a software generalist with 20 years of experience.</p>
<h2>Three CVs</h2>
<p>The clearest sign of the problem, for me, is that I maintain three different CVs.</p>
<p>One geared toward solution architecture.</p>
<p>One toward forward-deployed engineering.</p>
<p>One toward technology leadership.</p>
<p>I use them separately depending on what I’m applying for.</p>
<p>Ideally I’d have one CV - “I’m a generalist” - and apply to generalist roles, but those roles don’t exist as a category.</p>
<h2>Detours look different depending on who’s reading</h2>
<p>For a generalist, detours acquire <strong>range</strong>. In a specialist hiring process, detours are what you have to explain.</p>
<p>Solution architect/development consultant. Startup founder. CTO. Consultant. Software builder. Forward-deployed engineer.</p>
<p>All of these are different pathways I could have individually specialised into. But you can’t have both.</p>
<p>To me, my profile reads something like: adaptable, can operate in different environments, can figure things out, not scared of undefined problems.</p>
<p>For the majority of classic roles, however, it will look like I can’t decide what to do and therefore can’t master a topic.</p>
<p>They want progressive depth in one lane.</p>
<p>It’s not only that they won’t hire me, however.</p>
<p>It’s also that I don’t like these roles.</p>
<p>I like being pulled into different problems.</p>
<p>I like things that aren’t fully scoped. I like to experiment, drive something forward, and figure out uncertainty.</p>
<p>The roles that would be easy to map onto a job board aren’t really the work I want.</p>
<p>The work I want doesn’t show up as a normal title with a normal hiring funnel.</p>
<h2>What this leaves you with</h2>
<p>This doesn’t mean generalists are stranded. It just means the standard “Plan B” of submitting CVs to traditional job boards was the wrong tool for the job.</p>
<p>Hunting for non-standard roles using a standard hiring funnel doesn’t work well.</p>
<p>It changes how I look at the options going forward:</p>
<ul>
<li><p><strong>Double down on building:</strong> Keep working on products and bootstrapped projects. Zero-to-one progress takes time.</p>
</li>
<li><p><strong>Sell range directly:</strong> Lean into consulting or fractional work, where clients hire you specifically to handle cross-functional ambiguity rather than fit into a fixed org chart.</p>
</li>
<li><p><strong>Target the rare frontier roles:</strong> Focus exclusively on those rare positions that explicitly need an <em>Eierlegende Wollmilchsau</em> to build something new from scratch inside a larger company.</p>
</li>
</ul>
<p>Being a generalist is great; plan B just doesn’t come neatly packaged on a job board.</p>
<p>Realising that doesn’t make the path easy, but it changes how to navigate it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>77 Roasts Later: Vibe Roasting My Way to Specialty Coffee</title>
      <link>https://www.learnedlate.com/writing/77-roasts-later-vibe-roasting-my</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/77-roasts-later-vibe-roasting-my</guid>
      <pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate>
      <description>After 77 roasts on my Kaffelogic Nano, I roast home coffee that tastes like the specialty bag I copied. Notes on degassing, profiles and tracking with AI.</description>
      <content:encoded><![CDATA[<p>77 roasts into my coffee roasting journey, I can say that I have achieved par with the coffee I was trying to copy-roast.</p>
<p>Here are the details of how this started:</p>
<p><a href="https://www.learnedlate.com/writing/the-home-roaster-business-case">The Home Roaster Business Case</a></p>
<p>These beans started my journey, and I’ve now finally managed to roast the same green beans to the level that the coffee tastes just like the specialty roaster beans I bought.</p>
<p>77 roasts is the total of a whole set of different beans I roasted, and all of them contributed to my learning here.</p>
<p>The coffee I set out to copy took <a href="https://brewedlate.com/roast-logs/kenya-gatugi-peaberry">me 17 attempts</a>.</p>
<p><img src="https://www.learnedlate.com/images/writing/77-roasts-later-vibe-roasting-my/1.webp" alt="Explaining the Dunning-Kruger Effect — theoptimumdrive.com"></p>
<p>And from the chart below, you can see it pretty much represents the Dunning-Kruger-Effect.</p>
<p><img src="https://www.learnedlate.com/images/writing/77-roasts-later-vibe-roasting-my/2.webp" alt="Line chart “Cup quality across 17 attempts” rising to a top score at the latest roast"></p>
<p>My first batch, when I wrote my last piece on this, was decent. I was happy with the fruity notes, but it was a little dark.</p>
<p>My roaster, the Kaffeelogic Nano, works as follows;</p>
<p>You have a roast profile that’s loaded onto the machine; it describes a roast curve as to how quickly and for how long the beans should be heated before the heating is stopped and stalled. Aside from choosing a profile, you can set the roast level, which influences how high that heating temperature goes and the quantity of beans in grams so the unit knows how much power it needs to reach the temperature.</p>
<p>Naturally, after finding my beans too dark, I went lighter on the roast level, but that just turned the whole thing sour and unpleasant.</p>
<p>That’s the valley I dipped into.</p>
<h2>The valley of terrible coffee</h2>
<p>As with anything, there’s a learning curve. With coffee, that learning curve materialises about ten days after roasting in the cup you brew.</p>
<p>During roasting, CO2 builds up in the bean and then needs to “degas” for about 10 days to really taste good. After 10 days, many of my failed attempts would either taste grassy and underdeveloped or be too dark, bland, or like instant coffee.</p>
<p>My workflow therefore would be something like this:</p>
<ol>
<li><p>roast beans with some profile and roast level</p>
</li>
<li><p>wait 10 days</p>
</li>
<li><p>brew, taste and take notes</p>
</li>
<li><p>repeat</p>
</li>
</ol>
<p>You can get really lucky on the first try and head in the right direction, but getting from good to great can sometimes backfire, leaving you worse off by under- or overshooting.</p>
<p>A few lessons I’ve learned here:</p>
<p>I started out roasting 60g batches as I didn’t want to waste precious beans on my first tries. Turns out that the roaster and the profiles aren’t geared for that, and so bumping back up to 100- 120 g solved that.</p>
<p>Ambient temperature plays a role too. As the southern hemisphere winter started, temperatures got colder, and my roasts got worse. Moving the roaster from the garage to the office helped.</p>
<p>Degassing properly. I use peanut butter jars as I’ll have a lot of coffee batches resting and don’t want to buy any fancy valve coffee containers. Specialty coffee beans will come in a pack with a little valve that lets CO2 escape, but keeps oxygen out. That’s handy as it supports degassing without getting the beans stale from too much oxygen. If you just screw the lid of your jar on tightly, degassing will stop, and your coffee will taste somewhat green and underdeveloped.</p>
<p>I’ve noticed this, as usually the first try after 10 days was awful, but then after, say, 17 days it got better. Now, I just lift the lid up once in a while to let the CO2 out.</p>
<p>Finding the right profiles is another challenge. Kaffeelogic comes with profiles, and the community has a whole lot more. With some beans, these default profiles do a good job; with others, they won’t.</p>
<p>Here I found that the company behind Kaffeelogic has a second, more expensive roaster targeted at professionals. Apparently it’s almost exactly the same, just with some different software and different profiles.</p>
<p>Turns out they did a sloppy job of encrypting these, so I managed to get all of the Nucleus Link profiles and made them compatible with Kaffeelogic, and the results are quite good.</p>
<p>The <a href="https://brewedlate.com/roast-profiles">Nucleus Link profiles</a> aren’t a different roaster so much as a different roast strategy on the same fluid-bed hardware. They just seem to be geared towards the specialty coffee I’m trying to roast.</p>
<h2>Vibe Roasting</h2>
<p>Now obviously, this would have all taken me years, or at least consumed a lot more of my time, about five years ago. But as any sane person with a large token budget, I built some tools and frameworks to help me vibe roast my way to shorter feedback loops and better coffee.</p>
<p>The first thing I needed was tracking the different green beans I have and saving their profile so that I can feed that context into a prompt.</p>
<p>Aside from the green bean profile, the prompt receives past roast logs of other coffees, the roast profiles from the Kaffeelogic machine, a guide on how the profiles work and all of my cupping notes from when I tried out a coffee.</p>
<p><img src="https://www.learnedlate.com/images/writing/77-roasts-later-vibe-roasting-my/3.webp" alt="My Roasting dashboard with a Current Roast Goals dialog for a Colombian natural coffee"></p>
<p>So when <a href="https://brewedlate.com/roasting">I plan a new roast</a>, the AI model will have information such as “that last cup was a bit sour and looked a little dark”.</p>
<p>I don’t necessarily know what that means for roasting, if the profile is right or what level it should be, but with all the context, I usually get a decent next step that improves upon the last one.</p>
<p><img src="https://www.learnedlate.com/images/writing/77-roasts-later-vibe-roasting-my/4.webp" alt="Roast planning dialog for Ethiopia Sidamo ETH04 with a table of past roasts and an AI roast assistant"></p>
<p>For every roasted coffee, I’ll track the logs from the roaster, the weight before and after and the time it took. Then I’ll keep track of resting time to see how long it takes.</p>
<p><img src="https://www.learnedlate.com/images/writing/77-roasts-later-vibe-roasting-my/5.webp" alt="Roast History list showing roasts R-103, R-104, R-101 and R-094 with levels and weights"></p>
<p>This makes the workflow so much simpler and lets me iterate on coffee much faster.</p>
<p>I don’t want to throw away beans, and I don’t want to read endless books about the theory of roasting, so collecting data and having an agent assist you in the process makes a ton of sense.</p>
<h2>AI, the hobby accelerator</h2>
<p>Reaching parity with Rocket Coffee was why I bought this roaster. Achieving that makes me feel like a roasting pro!</p>
<p>Without the structure and the app, and with an AI model in the loop to help me navigate all the variables, this would have taken me so much longer. Honestly, I probably wouldn’t have stuck with it.</p>
<p>The Kaffeelogic Nano is a great system, but home roasting used to demand a serious time commitment. To do it the traditional way, it basically needs to be a proper, full-time hobby.</p>
<p>What’s incredible about where technology is today is how AI lets you speed-dial through learning something that previously felt out of reach. It took a high-friction, time-consuming hobby and turned it into something I could easily pick up and master in my spare time.</p>
]]></content:encoded>
    </item>
    <item>
      <title>How I Code Today</title>
      <link>https://www.learnedlate.com/writing/how-i-code-today</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/how-i-code-today</guid>
      <pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate>
      <description>I scope epics as GitHub issues and let loops and skills work through them, then review and merge the pull requests a few hours later.</description>
      <content:encoded><![CDATA[<p>It was obvious that the way we code was going to change, but just how much is becoming more and more evident.</p>
<p>These days I scope up a bunch of epics in GitHub and then check back a couple of hours later to review and merge finished pull requests to be deployed into my app.</p>
<p>Here, I want to run you through how things have changed and how I work today.</p>
<p>I work on multiple projects simultaneously and am PM, Engineer, GTM and support at the same time.</p>
<p>Without the right setup, this wouldn’t be possible to this degree or would take a lot more time to do.</p>
<p>So let’s dive into all the latest buzzwords: loops, skills, MCP, cli etc.</p>
<h2>Skills - the foundation</h2>
<p>A skill is pretty much a predefined prompt for an agent, telling it what to do.</p>
<p>This could be this amazing <a href="https://github.com/cursor/plugins/blob/main/cursor-team-kit/skills/thermo-nuclear-code-quality-review/SKILL.md">Thermo-Nuclear Code Quality Review from Cursor</a>, or it could be a set of instructions to use an MCP to fetch an error trace from your prod system and analyse a customer&#39;s issue more deeply.</p>
<p><img src="https://www.learnedlate.com/images/writing/how-i-code-today/1.webp" alt="Skill file table for “thermo-nuclear-code-quality-review” with its description and core prompt"></p>
<p>I use these as building blocks in cron jobs, loops or just all sorts of ad-hoc work.</p>
<p>One skill here is my customer triaging.</p>
<p>When a customer reports an issue via email, I use it to let the agent parse through the email, identify the core problem and create a ticket for further processing. That saves me quite a bit of work in the day-to-day and feeds into the loop.</p>
<h2>Loops - working through tickets</h2>
<p>In my projects, I use GitHub because that’s where my code lives anyway, and it has a powerful CLI that lets an agent directly communicate with it. GitHub also has an inbuilt ticketing system: Issues.</p>
<p><img src="https://www.learnedlate.com/images/writing/how-i-code-today/2.webp" alt="GitHub issues list for fstrauf/call-analyzer with open “Counterfactual backtesting” issues and labels"></p>
<p>It’s nice as coding agents understand this naturally, and it links into Pull requests. It’s also independent of markdown files that agents like to create but then live in the git history and are harder to track and search through.</p>
<p>If you do just one thing, utilising GitHub Issues to do scoping, maintaining and working through issues is a huge structural boost. Even without a loop.</p>
<p>A loop is a simple command-line script. It might look a bit like this:</p>
<p><code>For all tickets;</code></p>
<p><code>{</code></p>
<p><code>Use Kimi Code CLI with scoping skill to dig into the root cause.</code></p>
<p><code>Once clear, update ticket.</code></p>
<p><code>set ticket to ready.</code></p>
<p><code>}</code></p>
<p>I use two main ones. One for scoping up tickets; this includes evaluating architectural fit, focusing on the root cause and prioritising. The second is for implementation.</p>
<p><img src="https://www.learnedlate.com/images/writing/how-i-code-today/3.webp" alt="Two terminal windows running scope-loop and pr-loop with issue progress logs"></p>
<p>The implementation loop is a bit more complex:</p>
<ol>
<li><p>It picks up the ready ticket with the highest priority and creates a worktree branch</p>
</li>
<li><p>It sets a goal and spawns a subagent that does the coding</p>
</li>
<li><p>Thermo-nuclear code quality review</p>
</li>
<li><p>Full test suite</p>
</li>
<li><p>User testing</p>
</li>
<li><p>Frontend testing</p>
</li>
<li><p>Pull request</p>
</li>
</ol>
<p>With this alone, things get pretty hands-off.</p>
<p>10-15 issues in the queue; running the whole test suite will run for hours without needing me at all. All I need to do is review and approve the PRs.</p>
<h2>More helpers</h2>
<p>The loop and the skills rely heavily on MCP or CLI to function properly. Many companies support at least one.</p>
<p><img src="https://www.learnedlate.com/images/writing/how-i-code-today/4.webp" alt="Kimi Code terminal welcome screen listing connected MCP servers"></p>
<p>Here are just a few. BetterStack for error tracking on prod. I combine that with a skill that runs weekly and checks for any issues and files tickets for each.</p>
<p>PostHog is used as part of my weekly SEO in combination with <a href="https://www.pageseeds.com/">Pageseeds CLI</a>. This will give the agent full context of how a site is performing, where traffic goes, and issues users might be facing.</p>
<p>MCP for custom workflow steps is mostly overkill, so here I usually go for a simple CLI tool to do something like email fetching.</p>
<h2>Where will this end?</h2>
<p>A year ago, I was still prompting agents to code certain parts of the app and reviewing bits and pieces, triggering isolated steps myself.</p>
<p>What has enabled this new style is not just model advancements, but also tooling. Kimi, Grok, Claude, etc. have all significantly improved on their CLI capabilities and enabled goal setting, subagents, skills, plugins, etc.</p>
<p>On top of that, a recent trend has been cheaper and more efficient models. This is usually what lets people like me with a limited token budget experiment. If I’m not constrained by token usage because it’s gotten cheaper, then I’ll automate everything.</p>
<p>This trend of better models, cheaper models and better tooling is only going to continue. Today I have to do most of the plumbing to set up and run this system; in a year’s time, Kimi, Grok and Claude will likely take care of all of this out of the box.</p>
<p>Continuing to push the boundary here will level the playing field for people with no coding skills and, at the same time, will push engineers towards solving more difficult problems.</p>
<p>An example here is indie hacking. A trend where an individual will find a niche and build software for it, starting a SaaS business.</p>
<p>Levelsio looks at this trend and argues that the traditional indie hacker playbook is dead. When finding a niche problem and building a software solution becomes so effortless that anyone can do it in an afternoon, the low-hanging fruit disappears. Micro-SaaS pricing gets driven toward zero, and standard apps become commoditised overnight.</p>
<blockquote>
<p>I&#39;m seeing a trend here of declining revenue and traffic with indiehackers</p>
<p>On my own projects too</p>
<p>Maybe big VC products too but I wouldn&#39;t know cause they don&#39;t share revenue</p>
<p>To me it seems clear BigAI is cannibalizing everything that used to be apps</p>
<p>Not bad btw, just times</p>
<p>— <a href="https://x.com/levelsio/status/2081372113307402730">@levelsio</a></p>
</blockquote>
<p>Instead of an endpoint, I see this as an ongoing cycle of moving up the abstraction stack. As the lower-hanging fruit gets continuously solved and automated, engineers are naturally driven toward higher-stakes, more complex problems. But as agentic tooling and model capabilities keep expanding, the playing field for <em>those</em> higher-level problems gets levelled as well—pushing us even further up the stack.</p>
<p>Software execution itself is becoming a utility, but the frontier of what we can build keeps expanding. Ultimately, the value isn’t disappearing—it’s just shifting away from the mechanics of writing code toward knowing which complex problems are actually worth solving, orchestrating the system architecture, and owning the distribution to reach people.</p>
]]></content:encoded>
    </item>
    <item>
      <title>The Home Roaster Business Case</title>
      <link>https://www.learnedlate.com/writing/the-home-roaster-business-case</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/the-home-roaster-business-case</guid>
      <pubDate>Thu, 19 Mar 2026 00:00:00 GMT</pubDate>
      <description>A $900 second hand Kaffelogic home roaster pays for itself after about 14 kg of roasted coffee, roughly 8 months for us. This is the math and my first roast.</description>
      <content:encoded><![CDATA[<p>I like good coffee.</p>
<p>I like it so much, that I don’t mind spending $26 NZD on a 250g bag. This here is from one of my favourite roasters and it’s absolutely delicious. It’s a fruit bomb of a coffee.</p>
<p><img src="https://www.learnedlate.com/images/writing/the-home-roaster-business-case/1.webp" alt="Rocket Coffee bag labelled Kenya Filter Roast, Gatugi Peaberry, with raspberry, rhubarb and purple winegums notes"></p>
<p>The kg price of this bag sums to $104.</p>
<p>Now here is something interesting I found out. The green bean supplier below sells the exact same coffee, un-roasted, for ~$34/kg.</p>
<p><img src="https://www.learnedlate.com/images/writing/the-home-roaster-business-case/2.webp" alt="John Burton spec sheet for Kenya Gatugi PB with tasting notes, score 84+ and washed process"></p>
<p>That’s a whopping $70 dollar difference. Roasting these beans will lose about 12% in weight, but the difference is still $65 per kg.</p>
<p>At this point I’m obviously asking myself:</p>
<ol>
<li><p>How hard can roasting coffee be?</p>
</li>
<li><p>How much is a coffee roaster?</p>
</li>
</ol>
<p>I’ll get to #1 later, but I found a second hand home roaster for $900.</p>
<p>Say I’m saving $65 per kg.</p>
<p>900 ÷ 65 ≈ <strong>14 kg of roasted coffee</strong></p>
<p>I would pay for that roaster after 14kg of roasted coffee!</p>
<p>That’s less than my annual consumption. We drink about 4 cups a day, 15g each making this 1,8kg/month i.e. we’d after ~8 months.</p>
<p><img src="https://www.learnedlate.com/images/writing/the-home-roaster-business-case/3.webp" alt="Order email “Congrats on winning Kaffelogic Nano 7e Home Roaster” with a $950.00 total"></p>
<p>The model I got is from an NZ company called Kaffelogic.</p>
<p>I went for this one mainly because it was second hand, it’s super small and it’s an air roaster, which seem easier to handle.</p>
<p><img src="https://www.learnedlate.com/images/writing/the-home-roaster-business-case/4.webp" alt="Black Kaffelogic Nano 7e roaster on a desk next to a laptop"></p>
<h2>How Hard Can It Be?</h2>
<p>This of course is my gamble. If it’s too hard, i just wasted 1000 dollars.</p>
<p>I have zero experience in roasting, I just enjoy coffee, grind my beans and do filter coffee.</p>
<p>I’m pretty sure it can’t be that easy. If this is where all the money is, then there has to be some justification. Maybe it’s the expensive machines if you want to produce at scale.</p>
<p>But then, my business case above shows that pretty much anyone who buys specialty coffee, would be able to pay for a home roasting machine in no time.</p>
<p>Kaffelogic has been around since at least 2018, producing home roasters. So how come I’ve never heard of this?</p>
<p>It get’s even better. The Kaffelogic Nano comes with a whole set of profiles that are seemingly plug and play.</p>
<p>The guy who sold me the roaster packed some green beans.</p>
<p>The key points here are the process “Natural” i.e., how the raw beans have been processed and altitude. Beans grown at 1800 MASL are much denser and that needs to be taken into account on the roaster.</p>
<p><img src="https://www.learnedlate.com/images/writing/the-home-roaster-business-case/5.webp" alt="Chiasso Coffee Roasters bag label: Ethiopian Guji natural arabica, sweet, ripe berries, spice, 1800 to 2200 MASL"></p>
<p>Accordingly, Kaffelogic comes with something like this.</p>
<p><img src="https://www.learnedlate.com/images/writing/the-home-roaster-business-case/6.webp" alt="List of Kaffelogic profile files in the folder “Altitude V2 - Filter”, such as Filter - Natural - 2000m-2700m Altitude.kpro"></p>
<p>So to roast above coffee for filter brewing, I would pick “Filter - Natural - 2000m-2700m”. This then presets to which temperature the beans are heated, when to stop heating, how quickly and likely a ton of other stuff that I can’t yet comprehend.</p>
<p>That’s fine, I’ll just throw in some beans and try the default.</p>
<h2>My First Roast</h2>
<p>I have no idea how old the beans from the seller are. Green beans supposedly last quite long, but my expectations where quite low.</p>
<p>All I did was take the green beans, weigh 120g and place them in the machine. I then load the suitable default profile and select a roast level i.e., how dark you want the beans to be roasted.</p>
<p>Press play and it goes like this:</p>
<p>I did the same batch again with a darker roast level just to see the difference.</p>
<p><img src="https://www.learnedlate.com/images/writing/the-home-roaster-business-case/7.webp" alt="Two glass jars of roasted beans, one with a handwritten label reading “Guji 2”"></p>
<p>A bit annoying in this workflow that you can’t immediately try it. Roasted coffee needs to rest to degass and release some of the CO2 that has been stored in the beans during roasting.</p>
<p><img src="https://www.learnedlate.com/images/writing/the-home-roaster-business-case/8.webp" alt="Cartoon title card reading “5 Days Later...” on a red background"></p>
<p>Expecting nothing, I brew a cup. For the non coffee people, you usually start to smell the flavours when you start pouring water over the grounds and sure enough I smell fruit. FRUIT! On my very first roast. Fruit is typical in these Ethiopian beans, so that’s great.</p>
<p>In the cup it even tastes like fruit which kind of blows my mind. It’s not perfect and has a little bit of a grassy note to it, which tells me it’s likely not roasted enough.</p>
<p>Either way, I’ blown away. I have roasted coffee and it tastes good.</p>
<p>Not quite as good as Rocket Coffee, but that was my very first try.</p>
<p>The iteration here is slow as now I need to tweak parameters and wait another five days (minimum) for the beans to rest.</p>
<p>The big question. Can anyone do this and will the results be consistent?</p>
<h2>Systems</h2>
<p>I love systems and I already had this nice system of scanning the internet for the cheapest beans and an AI assisted process of iterating on my coffee brewing, perfecting the process of grinding to the right size and brewing the right recipe.</p>
<p><img src="https://www.learnedlate.com/images/writing/the-home-roaster-business-case/9.webp" alt="Recipe card for Gatugi Peaberry filter roast: ratio 1:16.5, 94C, 15g in 248g, 63 clicks, V60"></p>
<p>Now with roasting it becomes this interconnected loop.</p>
<ol>
<li><p>You buy green beans,</p>
</li>
<li><p>you roast,</p>
</li>
<li><p>you rest,</p>
</li>
<li><p>you grind,</p>
</li>
<li><p>you brew,</p>
</li>
<li><p>you taste and</p>
</li>
<li><p>you repeat.</p>
</li>
</ol>
<p>There is a lot of data involved in that process and it can be used to iterate faster and get us to the perfect roast or perfect cup faster.</p>
<p>The beans will have an altitude, origin, variety and a processing method.</p>
<p>The roaster will have a matching profile. It will also log what actually happens throughout a roast.</p>
<p>It will be configurable via a roast level to determine how light or dark you want your beans to be and which flavours you want to produce in the coffee.</p>
<p>The roasted beans will have a color that can be read via a photo on a white background and classified (it’s called Agtron - a roast-color score for coffee beans).</p>
<p><img src="https://www.learnedlate.com/images/writing/the-home-roaster-business-case/10.webp" alt="Roasted coffee beans scattered on a white surface"></p>
<p>Knowing the Agtron score of a roast helps us tweaking the parameters next time we roast.</p>
<p><img src="https://www.learnedlate.com/images/writing/the-home-roaster-business-case/11.webp" alt="Roast History entry R-008, Guatemala La Grande, Medium (3.0), Agtron 52, 80g to 69.40g"></p>
<p>Combine this technical roast information with how you’ve brewed the beans and how they’ve tasted and ideally even someone like me, with zero experience in roasting coffee, can quite quickly get to a decent roast.</p>
<p>If I can do this and it saves me money, the big question is, why doesn’t everyone roast their on coffee.</p>
<p>I get that this might be a specific market and I don’t think average joe who whips up some instant coffee will do this, but I can totally see anyone that owns a coffee grinder with hundreds of dollars to also consider roasting if it’s easy enough.</p>
]]></content:encoded>
    </item>
    <item>
      <title>I don't think content SEO is dead</title>
      <link>https://www.learnedlate.com/writing/i-dont-think-content-seo-is-dead</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/i-dont-think-content-seo-is-dead</guid>
      <pubDate>Mon, 09 Mar 2026 00:00:00 GMT</pubDate>
      <description>I don't think content SEO is dead. My small sites reached hundreds of thousands of impressions with $0 ad spend, using a CLI and AI. This is the setup.</description>
      <content:encoded><![CDATA[<p>It’s been a while on my SEO journey. SEO is something I never liked and in fact avoided. Now I’m somewhat of a pro.</p>
<p><img src="https://www.learnedlate.com/images/writing/i-dont-think-content-seo-is-dead/1.webp" alt="Man in a suit on a campus captioned “You know, I'm something of a SEO expert myself”"></p>
<p>Here’s Days to Expiry, which I launched in November.</p>
<p>My setup has pushed my small sites to hundreds of thousands of impressions purely from content SEO, with $0 ad spend.</p>
<p><img src="https://www.learnedlate.com/images/writing/i-dont-think-content-seo-is-dead/2.webp" alt="Google Search Console performance chart with 267 clicks, 230k impressions and average position 7.3"></p>
<p>Since I last wrote about the topic, much has changed.</p>
<p>I’ve gone from a bunch of prompts and MCPs to a command line interface and tools.</p>
<p>I’ve integrated a feedback loop and consolidated the SEO part with my Reddit marketing tooling.</p>
<p>For the last week I’ve been running this for three sites and the first results are promising.</p>
<p>My coffee site, now brewedlate.com</p>
<p><img src="https://www.learnedlate.com/images/writing/i-dont-think-content-seo-is-dead/3.webp" alt="Google Search Console performance chart with 6 clicks, 1.79k impressions and average position 14"></p>
<p>My oldest site, Expensesorted.com</p>
<p><img src="https://www.learnedlate.com/images/writing/i-dont-think-content-seo-is-dead/4.webp" alt="Google Search Console performance chart with 3.53k clicks, 225k impressions and average position 11.2"></p>
<p>The biggest benefit of this system is clearly for developers running multiple sites, but It will work just as well for a single site.</p>
<h2>System Overview</h2>
<p>All these sites have one thing in common, they have GitHub repos and the repos contain the markdown files with the content.</p>
<p>That makes it easier to manage from outside. All I need is to hook it all up to a tool to orchestrate it all.</p>
<p>I like to use AI via CLI, so why not also a tool that uses CLI and folder structures to manage all this.</p>
<p><img src="https://www.learnedlate.com/images/writing/i-dont-think-content-seo-is-dead/5.webp" alt="Terminal task dashboard showing the Days to Expiry project menu"></p>
<p>At first this might look shabby, old and outdated, but it’s really the most basic form of user interface. AI is very good at generating it quickly and you can focus on what matters.</p>
<p>Process and tools.</p>
<p>The core of it all is nothing fancy and as with the CLI UI that’s what I want. I want a workhorse that does the job.</p>
<p>The foundation is a simple folder structure.</p>
<p>Actually two. One for the “control centre” and one for the project that I’m marketing, here Days to Expiry.</p>
<p><img src="https://www.learnedlate.com/images/writing/i-dont-think-content-seo-is-dead/6.webp" alt="Diagram of the coding folder with days-to-expiry, brewedlate and expensesorted repos orchestrated by automation-cli"></p>
<p>The control centre contains all the prompts, tools and orchestration logic so that from here I can kick off a workflow such as the research of keywords for some new landing pages.</p>
<p><img src="https://www.learnedlate.com/images/writing/i-dont-think-content-seo-is-dead/7.webp" alt="Terminal menu of actions such as Work on a task and Batch Mode with an available tasks list"></p>
<p>Running something like this is pretty trivial if you think about it.</p>
<p>You need something like a task, the task will need to have a set of tools, such as being able to research keywords and creating a specification for a landing page.</p>
<p>In all of this I distinguish between two type of activities</p>
<ol>
<li><p><strong>deterministic</strong>: what can be coded and will stay the same, such as calling the Google Search Console API</p>
</li>
<li><p><strong>agentic</strong>: what needs intelligence, such as the interpretation of these results</p>
</li>
</ol>
<p>These activities can then be chained together.</p>
<p><img src="https://www.learnedlate.com/images/writing/i-dont-think-content-seo-is-dead/8.webp" alt="Flow diagram from Search Console and Reddit data through deterministic and agentic steps to updating content and posting replies"></p>
<p>Simple as that. No need for n8n, Openclaw or any of that stuff.</p>
<p>Just Python, a couple of files and AI.</p>
<p>In terms of AI I decided to go with CLI too.</p>
<p>To me, this makes the most sense. You pay for a subscription to Kimi code, Copilot, Codex etc. and that’s all you need to pay.</p>
<p>The main benefit for me is that you don’t need to hassle with the extra API and don’t need to pay for it either. It works just the same as the API, if not even better, because it interacts directly with your tools and files without bridging between local and remote running.</p>
<p>An example for the SEO workflow here would be to fetch data from Google Search Console for a site and place it in a folder. That then can be sent into the AI CLI to analyse it for issues and create specifications to resolve these issues.</p>
<h2>Automation</h2>
<p>You will have notices that a lot of the above are simple building blocks, that once in place, can be stringed together.</p>
<p>Here is an example, where every couple of weeks I will run a workflow to review and optimise articles that are positioning well or not so well in Google Search Console.</p>
<p><img src="https://www.learnedlate.com/images/writing/i-dont-think-content-seo-is-dead/9.webp" alt="Search Console pages report of daystoexpiry.com blog URLs ranked by impressions"></p>
<p>The workflow roughly goes like this:</p>
<ol>
<li><p>For a project, fetch the Google Search Console rankings</p>
</li>
<li><p>Get the ranked articles and investigate how to improve them (better structure, linking, depth)</p>
</li>
<li><p>Work through all articles detected and improve them</p>
</li>
<li><p>Publish</p>
</li>
</ol>
<p><img src="https://www.learnedlate.com/images/writing/i-dont-think-content-seo-is-dead/10.webp" alt="Terminal output of an article optimisation task for the theta-decay-dte-guide post"></p>
<p>The automation is that it does this for however many articles you might want.</p>
<p>I keep using and iterating this workflow on a daily basis and it’s quite a lot of fun this way.</p>
<p>Pretty sure there are lots of things I can still improve here.</p>
<p>I have packaged up the folder and am happy to share the foundation if someone is interested.</p>
<p><em>If you&#39;d like a system like this set up for your own site, I offer SEO automation systems for developers and founders. <a href="https://www.learnedlate.com/services/seo-automation">Learn more here</a>.</em></p>
]]></content:encoded>
    </item>
    <item>
      <title>Buying coffee gear directly from China</title>
      <link>https://www.learnedlate.com/writing/buying-coffee-gear-directly-from</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/buying-coffee-gear-directly-from</guid>
      <pubDate>Wed, 07 Jan 2026 00:00:00 GMT</pubDate>
      <description>I bought a Kingrinder K7 grinder, similar to the 1Zpresso ZP6, from the maker's Taobao store for about $230 NZD shipped. I also look at the Timemore scale.</description>
      <content:encoded><![CDATA[<p><img src="https://www.learnedlate.com/images/writing/buying-coffee-gear-directly-from/1.webp" alt="KINGrinder website page reading “K7 Coming Soon 2026”"></p>
<p>I bought the new Kingrinder K7 before it’s even available!</p>
<p>A coffee grinder similar to the popular 1Zpresso ZP6.</p>
<p><img src="https://www.learnedlate.com/images/writing/buying-coffee-gear-directly-from/2.webp" alt="Kingrinder K7 grinder parts on a wooden table next to a printed Chinese instruction sheet"></p>
<p>How is that even possible you think? Well, let me tell you that I’ve discovered Taobao.</p>
<p>Reddit is a great source for just about anything, including coffee.</p>
<p>There were discussions about this grinder, similar to the popular ZP6, just cheaper. The problem; it wasn’t officially released yet only a few individuals had gotten some from China.</p>
<p>So I went and searched places like Temu and Aliexpress and everything looked kind of fake and as if i’d waste my money for anything but that coffee grinder.</p>
<p>Temu and AliExpress are the more outside China facing platforms that have english translation and easy &amp; fast shipping to pretty much anywhere. They look dodgy sometimes though.</p>
<p>Someone hinted Taobao, but the website was just all Chinese with terrible translation.</p>
<p>Taobao is a massive Chinese online store and not generally available outside of China.</p>
<p><img src="https://www.learnedlate.com/images/writing/buying-coffee-gear-directly-from/3.webp" alt="Taobao login page with a QR code and phone number sign-in form"></p>
<p>But then I found the app, and the app actually worked really well. From the grinder manufacturers official website <a href="https://www.kingrinder.com/">https://www.kingrinder.com/</a> I was able to find the official store on Taobao.</p>
<p><img src="https://www.learnedlate.com/images/writing/buying-coffee-gear-directly-from/4.webp" alt="Taobao store listing on a phone showing the K7 hand grinder at NZ$175.56 and accessories"></p>
<p>The similar ZP6 is about $200 USD which is about $350 NZD, so $175 is a nice discount. Shipping isn’t as good as with other merchants, but even ~$230 is decent here given that I was ordering from the manufacturers shop.</p>
<p><img src="https://www.learnedlate.com/images/writing/buying-coffee-gear-directly-from/5.webp" alt="Taobao order screen for the K7 grinder at NZ$173.00 with shipping, taxes and a NZ$232.18 total"></p>
<p>It took about a week to arrive and works well.</p>
<h2>Kingrinder K7 vs 1Zpresso ZP6</h2>
<p>You’ve probably heard stories like these before. Some product that is sold quite expensively from some established brand in some store, can be bought at similar quality for much cheaper.</p>
<p>This might be because it is quite literally produced in the same Chinese factory.</p>
<p>Turns out some guy on reddit thinks this might be the case for the ZP6 and the K7.</p>
<p><img src="https://www.learnedlate.com/images/writing/buying-coffee-gear-directly-from/6.webp" alt="Reddit r/pourover comments discussing Kingrinder and 1Zpresso grinders"></p>
<p>Either way, I’m quite happy with the grinder, as just as promised, it produces a good grind size uniformity, meaning that one can extract a lot of clarity and separate flavours from a cup.</p>
<p>So if it lists strawberry flavour on your coffee beans, you might achieve a good enough separation of flavours to clearly taste the strawberry.</p>
<p>The build quality is good. 1zpresso grinders might be a little better, but not quite justifying the almost double in price.</p>
<h2>Timemore coffee scale</h2>
<p>Another one of these Chinese brands is Timemore, they produce grinders, scales etc.</p>
<p><img src="https://www.learnedlate.com/images/writing/buying-coffee-gear-directly-from/7.webp" alt="Timemore Basic 2.0 espresso scale product page priced at $65.00"></p>
<p>With the scale here, we have the same thing.</p>
<p>The product has a ton of great reviews and people on reddit seem to like it.</p>
<p>It has a US store, which sells the not so recent models for a much higher price (likely due to tariffs and import costs).</p>
<p>Forget trying to get it in places like New Zealand.</p>
<p>I’ll try Taobao again do see if I can get my hands on some more “cheap” high quality Chinese coffee gear.</p>
<p>Taobao seems to be a great way to explore the Chinese market of products. A world which often seems completely hidden from us.</p>
]]></content:encoded>
    </item>
    <item>
      <title>VS Code Copilot for marketing, seo and investing</title>
      <link>https://www.learnedlate.com/writing/vs-code-copilot-for-marketing-seo</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/vs-code-copilot-for-marketing-seo</guid>
      <pubDate>Wed, 10 Dec 2025 00:00:00 GMT</pubDate>
      <description>I use VS Code with GitHub Copilot to run an SEO workflow, Reddit replies and investment research, not only to write code.</description>
      <content:encoded><![CDATA[<p><img src="https://www.learnedlate.com/images/writing/vs-code-copilot-for-marketing-seo/1.webp" alt="Drake meme rejecting “VS Code for coding” and approving “VS Code for marketing, seo, investing, ...”"></p>
<p>Yes, I use VS Code for coding. Together with GitHub Copilot on the Pro+ tier it’s hard to beat what you get for $40/month.</p>
<p>You’ll get the latest models and a reasonable allowance to use them.</p>
<p><img src="https://www.learnedlate.com/images/writing/vs-code-copilot-for-marketing-seo/2.webp" alt="VS Code Copilot model picker with Claude Haiku 4.5 selected"></p>
<p>But that’s not what I want to talk about here.</p>
<p>Aside from coding, I use VS Code more like an AI-powered automation environment where I can run entire processes end-to-end.</p>
<p>One of those workflows is for SEO.</p>
<p>It’s a three-step prompt workflow with file-system access. Copilot writes structured JSON files, talks to an MCP service I built to pull strong keywords for a topic, enhances and clusters them, and then generates articles based on those keywords.</p>
<p>It even aligns those articles with the rest of my content library. It’s basically an entire SEO pipeline running inside my editor.</p>
<p><img src="https://www.learnedlate.com/images/writing/vs-code-copilot-for-marketing-seo/3.webp" alt="VS Code explorer showing reddit and seo prompt files in .github/prompts"></p>
<p>Another workflow is for Reddit. I can search for specific topics using another MCP tool that fetches threads, then Copilot writes everything into my own database. I’ve got a tiny web UI wired up so I can reply to posts directly from inside VS Code. So that’s two separate marketing and SEO workflows — all running without leaving the IDE.</p>
<p><img src="https://www.learnedlate.com/images/writing/vs-code-copilot-for-marketing-seo/4.webp" alt="Reddit Opportunities dashboard listing posts with drafted replies and Mark Posted and Skip buttons"></p>
<p>And then there’s the completely different world of finance. I use Copilot in VS Code as a Python sandbox that connects to Interactive Brokers’ local gateway to evaluate trading strategies. It can spin up scripts, test ideas, debug them, and iterate with me. Again, all inside the same environment.</p>
<p><img src="https://www.learnedlate.com/images/writing/vs-code-copilot-for-marketing-seo/5.webp" alt="Chat results table comparing wheel and LEAPS strategies on GDX and GLD with key findings"></p>
<p>That’s what I love about this setup: the flexibility. It’s not just “AI writing code.”</p>
<p>It’s the fact that I have a full folder structure, a development environment, tool calls, local scripts, MCP integrations with Copilot orchestrating workflows across all of it.</p>
<p>In practice, it’s way more flexible than what Codex, ChatGPT, or Claude can do in a chat window.</p>
<h2>SEO deep dive</h2>
<p>The setup isn’t anything crazy and that’s what I like. It’s all just text files, folders and a bit of structure.</p>
<p><img src="https://www.learnedlate.com/images/writing/vs-code-copilot-for-marketing-seo/6.webp" alt="VS Code editor with the seo1-coffee prompt file next to the Copilot chat panel in agent mode"></p>
<p>It’s not as elegant as one of these pre-made SaaS solutions, but it takes you a couple of hours to set up and you can do whatever you like and avoid 10 different subscriptions.</p>
<p>It’s the age of custom of software and I’m here for it.</p>
<p>The files referenced in the prompt, will then explain whatever AI model you use, exactly what it should be doing.</p>
<p>For the SEO workflow the steps are roughly these:</p>
<ol>
<li><p>Check what we already have on the blog and which keywords we are targeting</p>
</li>
<li><p>Detect keywords that might be missing and use an MCP to find good, suitable ones</p>
</li>
<li><p>Analyse competition and create article draft topics</p>
</li>
<li><p>Create articles and link them with each other</p>
</li>
</ol>
<p><img src="https://www.learnedlate.com/images/writing/vs-code-copilot-for-marketing-seo/7.webp" alt="Markdown file of SEO keyword research instructions with a step-by-step workflow"></p>
<p>This then creates markdown files, which I can move over to my site to be rendered as blog posts.</p>
<p><img src="https://www.learnedlate.com/images/writing/vs-code-copilot-for-marketing-seo/8.webp" alt="File tree of days_to_expiry content files such as 01_cash_secured_puts_playbook.md"></p>
<p>Over time, this will hopefully compound to decent organic traffic.</p>
<p>I run this workflow every other week to create a couple of new pieces and then publish them.</p>
<p>It takes time, but I’m slowly making progress.</p>
<p><img src="https://www.learnedlate.com/images/writing/vs-code-copilot-for-marketing-seo/9.webp" alt="Google Search Console performance chart for daystoexpiry.com with 275 clicks and 4.58k impressions"></p>
<p>I’ve bundled up a full package with docs, templates, prompts etc. here.</p>
<p><a href="https://www.learnedlate.com/seo-automation">https://www.learnedlate.com/seo-automation</a> (sorry, I’ll charge for this as I want to gauge interest and support only those truly interested + I’ve spent a lot of time on this).</p>
<h2>Investment Research</h2>
<p>You could use Claude straight away to run some basic research and it would even write and execute Python code to crunch numbers, but this is nowhere near what you could be doing with a proper setup.</p>
<p><img src="https://www.learnedlate.com/images/writing/vs-code-copilot-for-marketing-seo/10.webp" alt="File tree of tests/sandbox Python scripts for wheel, LEAPS and options analysis"></p>
<p>The latest models will likely know what to do if you give it the right prompt.</p>
<p>Some key points when dealing with financial data.</p>
<ol>
<li><p>Use Python as it has better inbuilt data processing capabilities.</p>
</li>
<li><p>yFinance is a free package that accesses the free Yahoo Finance service.</p>
</li>
<li><p>Stick to the console instead of using a web ui for faster iteration. This is a general thing as if you let AI generate a UI it’s clumsy to tell it what went wrong.</p>
</li>
<li><p>If you have a terminal output, it can read what happened and iterate much faster in VS Code.</p>
</li>
</ol>
<p>Here is a quick analysis I ran to decide whether to roll a covered call or get assigned.</p>
<p><img src="https://www.learnedlate.com/images/writing/vs-code-copilot-for-marketing-seo/11.webp" alt="Terminal scenario analysis comparing taking assignment, rolling a covered call and holding 900 shares"></p>
<p>With pure Claude Code, you wouldn’t have gotten to the same stage as easily.</p>
<p>I’m sure I’ll come up with more stuff along the way, but I must say I prefer this ten times over buying these highly targeted SaaS solution. Often times you start using them and then run into a wall of what is and what is not possible forcing you to move on to something else.</p>
<p>Hand-rolling stuff isn’t always better, but I’ve had good success with these three use cases in VS Code so far.</p>
]]></content:encoded>
    </item>
    <item>
      <title>My Daily AI Stack (Plus Better Coffee)</title>
      <link>https://www.learnedlate.com/writing/my-daily-ai-stack-plus-better-coffee</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/my-daily-ai-stack-plus-better-coffee</guid>
      <pubDate>Thu, 20 Nov 2025 00:00:00 GMT</pubDate>
      <description>ChatGPT helps me dial in new coffee beans much faster. I also use the Dia browser, Superwhisper and VS Code Copilot daily. This is my AI stack.</description>
      <content:encoded><![CDATA[<p>How cool is it that these days, we can iterate and improve so quickly in our lives?</p>
<p>I’ve recently scored a great black friday deal with 1.5kg of tasty coffee. It was 30% off, so I went all in (I freeze the beans).</p>
<p><img src="https://www.learnedlate.com/images/writing/my-daily-ai-stack-plus-better-coffee/1.webp" alt="Flight Coffee bag labelled Santa Ana, El Salvador, tasting of strawberry, guava and cacao"></p>
<p>With a new bag of coffee, it’s always a little tricky to dial it in, especially with fancy beans like these. You need to figure out grind size, agitation, brew method, water temperature, etc., to get it right.</p>
<p>Sometimes it can take me up to 3-4 coffees, aka 45-60g of a 250g bag, to dial in a good cup.</p>
<p>Once I know how, I write down the exact recipe like this.</p>
<p><img src="https://www.learnedlate.com/images/writing/my-daily-ai-stack-plus-better-coffee/2.webp" alt="Notion table “Brew Recipes” with grind, equipment and recipe steps for three coffees"></p>
<p>Thanks to ChatGPT, this has gotten just so much faster in recent months.</p>
<p>I’ll take a photo of the beans and submit it with some details of what I typically do or what I have tried so far. The results here have come a long way. A year ago, it was pretty much useless and produced a lot of garbage, but now, it seems to have become a world barista champion.</p>
<p>Here’s my voice-to-text while sipping the coffee.</p>
<p><img src="https://www.learnedlate.com/images/writing/my-daily-ai-stack-plus-better-coffee/3.webp" alt="Voice-transcribed tasting notes mentioning strawberry, chocolate and a tiny bit of bitterness"></p>
<p>The reply.</p>
<p><img src="https://www.learnedlate.com/images/writing/my-daily-ai-stack-plus-better-coffee/4.webp" alt="AI reply diagnosing the tasting notes as fruit up front with bitterness creeping in"></p>
<p><img src="https://www.learnedlate.com/images/writing/my-daily-ai-stack-plus-better-coffee/5.webp" alt="AI advice reading “Your next step: go 1 click coarser and reduce agitation”"></p>
<p>I love it. Back in the day, you’d have to spend months learning about the ins and outs while wasting great coffee. Now you can learn about the ins and outs, but it’s easier to get to the result.</p>
<p><img src="https://www.learnedlate.com/images/writing/my-daily-ai-stack-plus-better-coffee/6.webp" alt="AI list headed “What to expect next cup” with clearer strawberry and no bitterness"></p>
<p>It needs less patience and perseverance.</p>
<p>It’s something I’ve noticed with coding, too. 10 years ago to learn to code was not a lot of fun. You’d sometimes run into these little issues that would take you hours and hours to resolve. You would get better, but it took an awful lot of perseverance.</p>
<p>AI seems to be helping with this by making things a little less painful to figure out.</p>
<p>TLDR: check out ChatGPT for coffee brewing, but I also thought it would be cool to share the other tools I use daily.</p>
<h2>AI tooling</h2>
<h3>Dia browser.</h3>
<p>This browser has been quite amazing for me.</p>
<p>You go to a website, and in the sidebar, you can open a ChatGPT sidebar to communicate with the browser, ask questions about different tabs, and summarise information.</p>
<p>There are a few competitors by now, namely ChatGPT Atlas, and Perplexity, so that’s cool to see where browsers are heading with AI being a lot more embedded.</p>
<p><img src="https://www.learnedlate.com/images/writing/my-daily-ai-stack-plus-better-coffee/7.webp" alt="WXT documentation page next to an AI answer about the browser extension side panel API"></p>
<h3>Superwhisper</h3>
<p>I’ve said this before, but this is such a cool feature when pinned to the microphone button on your keyboard.</p>
<p>You could enable the dictate feature on macOS itself, but it isn’t as good at picking up natural language. I don’t type that much anymore, and it lets you use all sorts</p>
<p><img src="https://www.learnedlate.com/images/writing/my-daily-ai-stack-plus-better-coffee/8.webp" alt="Superwhisper dictation overlay with a waveform and Stop (F5) and Cancel (Esc) buttons"></p>
<h3>Visual Studio Code Copilot</h3>
<p>I’ve been playing around with this for quite a while, mainly driven by Cursors’ and Claude Codes’ introduction of usage limits.</p>
<p>Cursor might have a few better features, but I can’t see myself paying 20-60$ a month to end up being rate-limited (unable to use the AI models the rest of the month).</p>
<p><img src="https://www.learnedlate.com/images/writing/my-daily-ai-stack-plus-better-coffee/9.webp" alt="Cursor pricing page showing Hobby free, Pro $20, Pro+ $60 and Ultra $200 per month"></p>
<p>With Copilot, it’s $10 for the cheapest and $39 for the highest, while the higher tier gives you 5x more usage instead of three. I used to max out my Cursor Pro tier in two days, while Copilot Pro would last for a whole month. Then if you need to, the $39 will get you as far as you need.</p>
<p><img src="https://www.learnedlate.com/images/writing/my-daily-ai-stack-plus-better-coffee/10.webp" alt="GitHub Copilot plans: Free $0, Pro $10 and Pro+ $39"></p>
<p>The main benefit to Codex from ChatGPT or Claude Code from Claude is that it’s model agnostic.</p>
<p>Yesterday, Google released Gemini 3, and you can use it straight away in your familiar environment.</p>
<p><img src="https://www.learnedlate.com/images/writing/my-daily-ai-stack-plus-better-coffee/11.webp" alt="VS Code Copilot model picker with Claude Haiku 4.5 selected and a tooltip on Gemini 3 Pro"></p>
<p>The other benefit is the flexibility of VS Code, where Copilot runs. You can do whatever you want.</p>
<p>I’ve built complex SEO workflows that use AI to verify SEO keywords and generate whole articles to improve my site’s SEO.</p>
<p>Set up properly, something like the command below, will run whole workflows of tasks that don’t necessarily have anything to do with coding (think scanning Reddit for posts to reply to to promote your product).</p>
<p><img src="https://www.learnedlate.com/images/writing/my-daily-ai-stack-plus-better-coffee/12.webp" alt="VS Code Copilot chat box with the /seo1-days-to-expiry prompt, Agent mode and Claude Haiku 4.5"></p>
<p>A nice little gimmick is that the Copilot subscription is linked to the whole GitHub infrastructure.</p>
<p><img src="https://www.learnedlate.com/images/writing/my-daily-ai-stack-plus-better-coffee/13.webp" alt="Phone screenshot of a merged GitHub pull request by Copilot fixing a mobile header that disappears after scrolling"></p>
<p>Somewhere, waiting for my wife, I noticed a bug on my site, but I wasn’t in front of my computer. No problem. Open the GitHub app --&gt; create a new Copilot task --&gt; let it work on it --&gt; review the changes on your phone --&gt; approve deploy to production --&gt; fixed.</p>
<h3>General AI Models</h3>
<h4>Venice AI</h4>
<p>Seems quite good for privacy and uncensored broad opinions.</p>
<h4>ChatGPT 5</h4>
<p>Aside from coffee, I use this to plan out coding tasks.</p>
<p>It’s quite good at complex assessments, where it runs through the whole codebase to get a complete picture to move forward. I use it only for planning, though.</p>
<h4>Claude Haiku 4.5</h4>
<p>This new model has been like an absolute game-changer for me.</p>
<p><img src="https://www.learnedlate.com/images/writing/my-daily-ai-stack-plus-better-coffee/14.webp" alt="Copilot model picker list with Claude Haiku 4.5 selected at 0.33x"></p>
<p>It’s pretty smart - almost as good as Sonnet 4.5, I’d say, but costs only a third to run.</p>
<p>This has been a pretty good evolution towards cheaper models instead of just smarter, more expensive ones.</p>
<p>The ecosystem is changing so quickly, so I think it’s important to just play around with all this stuff as much as you can. Do not lock into any annual subscription. They might be cheaper, but something new and better might show up at any time.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Weekly Wheel Income - week ending October 24th</title>
      <link>https://www.learnedlate.com/writing/weekly-wheel-income-week-ending-october</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/weekly-wheel-income-week-ending-october</guid>
      <pubDate>Tue, 28 Oct 2025 00:00:00 GMT</pubDate>
      <description>Week ending October 24. I aim for $1,000 a week in option premiums to pay rent. Gold puts worked, and too aggressive GDX puts got me assigned.</description>
      <content:encoded><![CDATA[<p>Goal: generate income to pay rent.</p>
<p>I’m about two months into this, and the simple goal is to pay the bills; to do that, I’m trying to make $ 1,000/week.</p>
<p>So far, this has been going well, but I’ve also learned a bunch from some too-aggressive trades where I got assigned.</p>
<h2>Snapshot</h2>
<p>(<a href="https://www.daystoexpiry.com/">source</a>)</p>
<p><img src="https://www.learnedlate.com/images/writing/weekly-wheel-income-week-ending-october/1.webp" alt="Days to Expiry table of option trades with $3,931.27 total premiums over the past 14 days"></p>
<h2>What worked</h2>
<ul>
<li><p>Juicy yields on Gold puts got me in the 2% weekly ROI range last week</p>
</li>
<li><p>Going a bit further out of the money feels like a better balance of premiums collected and capital gains on the upside</p>
</li>
</ul>
<h2>What didn’t work</h2>
<ul>
<li>Too aggressive ATM puts on GDX got me assigned with quite a high opportunity cost. The premiums were good, though.</li>
</ul>
<h2>Next week</h2>
<ul>
<li>Don’t get carried away by juicy yields and stick to the plan of making $1000/week.</li>
</ul>
<h2>Income Summary (YTD)</h2>
<ul>
<li><p>Total premiums: $7251  </p>
</li>
<li><p>Trades (opened/closed): 33/26  </p>
</li>
<li><p>Weekly ROI: 0.96%</p>
</li>
</ul>
<h2>Additional Notes</h2>
<p>I’ve realised that I was only chasing high yields and forgot my actual goal of generating income. This has led to suboptimal trades and excessive risk.</p>
<p>I’ve now moved on to keeping track of this via Interactive Brokers statement uploads that break down my trades into Weekly, Monthly and Annual performance compared to a set income goal.</p>
<p>Let’s say I want to make:</p>
<p>$1,000 / week<br>$4,333 / month<br>$52,000 / year</p>
<p>For each of these, on a rolling basis, I can now keep track of how my week of trading goes and how that translates to months and a year.</p>
<p>Why worry about overshooting? Well, here in New Zealand, capital gains are taxed more favourably than options premiums (which are treated as income). So keeping my income at a level where it covers costs allows me to pay only as much tax as I have to.</p>
<p><img src="https://www.learnedlate.com/images/writing/weekly-wheel-income-week-ending-october/2.webp" alt="Income tracking dashboard with weekly, monthly and annual goals and top income contributors"></p>
<h2>Disclosures</h2>
<p>Educational only. Not advice. Options carry risk. I may hold the positions mentioned.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Weekly Wheel Income — Week of 2025-10-18</title>
      <link>https://www.learnedlate.com/writing/weekly-wheel-income-week-of-2025</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/weekly-wheel-income-week-of-2025</guid>
      <pubDate>Wed, 22 Oct 2025 00:00:00 GMT</pubDate>
      <description>Week of 18 October 2025, my third week selling puts and calls for income on assets I hold. Gold puts worked, but I sized one position wrong.</description>
      <content:encoded><![CDATA[<p>Sell assets to pay rent or run generate income on these assets, by selling puts and calls?!  </p>
<p>I’m building a new business and need to pay the rent while I’m not making any money.</p>
<p>An intro to the topic can be found <a href="https://www.learnedlate.com/writing/paying-rent-by-selling-covered-calls">here</a>. This post is about my progress so far.</p>
<p>My general mindset is that I do this on assets I’ve been holding anyway, so I’m directionally aligned on them. Again, rather than selling assets, I try to make income with them.</p>
<h2>Snapshot</h2>
<p>(generated by <a href="https://www.daystoexpiry.com/ib-portfolio">Days to Expiry</a>)</p>
<p><img src="https://www.learnedlate.com/images/writing/weekly-wheel-income-week-of-2025/1.webp" alt="Days to Expiry table of option trades with $1,538.15 total premiums over the past 7 days"></p>
<h2>What worked</h2>
<ul>
<li><p>Gold and Uranium kept going up, allowing me to sell at-the-money puts with a juicy yield.</p>
</li>
<li><p>Scanner usage has enabled me to find better opportunities with high ROI.</p>
</li>
</ul>
<h2>What didn’t work</h2>
<ul>
<li><p>My directional trade of trying to get back into gold isn’t working; at-the-money puts are not being assigned.</p>
</li>
<li><p>Sized position wrong and will have multiple covered calls that will be assigned at the end of the week, with a large opportunity cost.</p>
</li>
</ul>
<h2>Next week</h2>
<ul>
<li><p>Improve position sizing by max 20-30% of a position to ensure upside.</p>
</li>
<li><p>Roll back into Gold and Uranium assignments via puts (potentially aiming for a lower strike, not to get caught in a correction).</p>
</li>
</ul>
<h2>Income Summary (YTD)</h2>
<ul>
<li><p>Total premiums: $4012  </p>
</li>
<li><p>Trades (opened/closed): 22/8  </p>
</li>
<li><p>Weekly ROI: 0.84%</p>
</li>
</ul>
<h2>Additional Notes</h2>
<p>I started about three weeks ago and have been learning many lessons. The best way to do this is to start with a small, short-term horizon for faster iteration.</p>
<p>What I wrestle with most when selling calls and puts is the fear of missing out on an opportunity. Gold last week was the perfect example.</p>
<p>Covered calls did deliver some yield, but with the straight-up moves of last week, getting assigned and missing out is a real risk.</p>
<p>This is not covered calls related, but I might need to be a bit more aggressive on gold/btc upside rather than just holding the underlying.</p>
<h2>Disclosures</h2>
<p>Educational only. Not advice. Options carry risk. I may hold the positions mentioned.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Playing with coffee data</title>
      <link>https://www.learnedlate.com/writing/playing-with-coffee-data</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/playing-with-coffee-data</guid>
      <pubDate>Thu, 16 Oct 2025 00:00:00 GMT</pubDate>
      <description>I collected the Shopify catalogues of more than 200 roasters, over 3000 coffees, to compare prices per 100g. I use the data to buy beans in New Zealand.</description>
      <content:encoded><![CDATA[<p>Something I learned super late was the difference the bean makes in making coffee.</p>
<p>I had heard and tried some single-origin from the supermarket, but it was really only after I ordered my first 250g bag at one of the local specialty roasters that I noticed the difference.</p>
<p>Be careful. It will ruin your taste. Once you’ve tasted the difference, you’ll have a hard time coming back.</p>
<p>If you think about it, it’s obvious. The good stuff is produced in perfect locations with ideal climates, then processed carefully and roasted quite differently from most supermarket coffee.</p>
<p>I’d say the gear and recipe when brewing coffee play a role, but good coffee beans are much more important.</p>
<p>Problem is good coffee is expensive.</p>
<p><img src="https://www.learnedlate.com/images/writing/playing-with-coffee-data/1.webp" alt="Grey Roasting Co. product page for Finca El Placer, Colombia, White Honey Geisha 200g at $60.00"></p>
<p>To not break the bank, I started playing around with data that one can get from coffee roasters.</p>
<p>Most shops these days use Shopify and publish the product catalogue in JSON format, making it easily readable by a script.</p>
<p><img src="https://www.learnedlate.com/images/writing/playing-with-coffee-data/2.webp" alt="JSON product data for Finca El Placer from Grey Roasting Co including a price of 60.00"></p>
<p>I plugged in my favourite roaster and collected all the different beans they offer to quickly compare prices, see where a particular coffee lies compared to others, or simply convert from different package sizes to a uniformly comparable metric of $/100g.</p>
<p>Additionally, I wanted to know when prices or products changed.</p>
<p>The little script turned into an app that collects, enriches, and filters coffees from more than 200 roasters, totalling more than 3000 coffees.</p>
<p>I probably went a little overboard here, collecting all that. Right now, I only use it for New Zealand to compare prices of different coffees.</p>
<h2>Here is how I buy beans</h2>
<p>I learned from Reddit that freezing beans works quite well, and I tried it out and can confirm it works.</p>
<p>That unlocks some good savings potential. Buy 1kg, dice it up into 250g ziplock bags and freeze it.</p>
<p>With the data I collected, the comparison is easy.</p>
<p>Shopify gives me the price per 250g, 500g and 1kg for most beans, so with a little math, one can unlock bulk shopping discounts.</p>
<p>If you enjoy expensive beans and drink a couple of cups a day, that’s pretty decent.</p>
<p><img src="https://www.learnedlate.com/images/writing/playing-with-coffee-data/3.webp" alt="Bulk Coffee Savings page listing three coffees with the savings from buying 1kg bags"></p>
<p>Alternatively, a search through all roasters and their coffees can reveal some interesting variety.</p>
<p>Without collecting all this data, I wouldn’t have been able to filter by coffees that have “peach”-tasting notes, filter by “filter”-roasts or sort by price.</p>
<p><img src="https://www.learnedlate.com/images/writing/playing-with-coffee-data/4.webp" alt="Coffee search results for “peach” showing Konga Ethiopia, Pititi Colombia and Sebastian Gomez coffees with prices"></p>
<p>Another aspect one can look at is a regional price comparison of coffees in a country.</p>
<p>Say I want to know how expensive this particular Guatemalan coffee is compared to other Guatemalan coffees from a New Zealand roaster.</p>
<p><img src="https://www.learnedlate.com/images/writing/playing-with-coffee-data/5.webp" alt="Coffee details card for a Guatemala filter coffee with a regional price comparison at the 56th percentile"></p>
<p>Price is not everything, so I make sure to taste a new bag first in a smaller quantity rather than buying bulk straight away.</p>
<h2>More cool stuff to do with coffee data</h2>
<p>I’m sure there is much more potential for analytics here, but here are a few things I found interesting in crunching through the data I collected.</p>
<p>There are decent price differences between coffees from different regions. That doesn’t mean they necessarily taste better.</p>
<p><img src="https://www.learnedlate.com/images/writing/playing-with-coffee-data/6.webp" alt="Coffee Price Analytics chart of median 250g price by origin, from Colombia at $28 to Guatemala at $20"></p>
<p>Why some regions are cheaper than others, I don’t know. It could have to do with local labour costs, the varieties that are grown, and the available data here.</p>
<p>When I collect this data, I run a job that gets the Shopify catalogue data and then updates the price. I keep that update to compare price changes.</p>
<p><img src="https://www.learnedlate.com/images/writing/playing-with-coffee-data/7.webp" alt="Recent Price Drops cards for Finca Rabanales, Koke Shalaye and Finca El Placer with discount percentages"></p>
<p>Now this is all just a little side project, but I love the idea of having all this data available and frequently updating it to gain insights, even if that’s just me buying better coffee and brewing tastier cups.</p>
<p>Ultimately, this might be my excuse for finally buying that expensive bag of beans I held myself back from.</p>
<p>It’s not the $40 I’m worried about; it’s more so that I’m worried it will ruin my taste and raise the bar for what I consider good coffee.</p>
<p>You can try out this little app here:</p>
<p><a href="https://coffee.learnedlate.com/">https://coffee.learnedlate.com/</a></p>
<p>PS.: I’ve recently been enjoying this V60 recipe. It’s not so much a recipe but more a guide on how react to parameters when your coffee is brewing</p>
<p>I highly recommend it as i’ve been upping my coffee game thanks to it.</p>
<iframe src="https://www.youtube-nocookie.com/embed/wZst-D3eUm0" width="728" height="409" title="YouTube video" loading="lazy" allowfullscreen></iframe>]]></content:encoded>
    </item>
    <item>
      <title>Rediscovering the known - Working From the Floor</title>
      <link>https://www.learnedlate.com/writing/rediscovering-the-known-working-from</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/rediscovering-the-known-working-from</guid>
      <pubDate>Mon, 29 Sep 2025 00:00:00 GMT</pubDate>
      <description>After a year of working from the floor, my lower back pain is gone. I describe my floor desk setup and my layman's take on why it helped.</description>
      <content:encoded><![CDATA[<p>I’ve been working in front of computers for 20+ years.</p>
<p>Naturally, I have had my fair share of back pain. Especially in the lower back. Many people have the same issue these days.</p>
<p>You won’t be surprised if I tell you that we are not built to sit all day. Our body is designed for running, walking, carrying things, and sitting. Just not sitting slouched all day on a comfy office chair.</p>
<p>Many offices or home offices will, in some capacity, even think about ergonomic seating. Most will be familiar with a standup desk, ergonomic chairs or the walking treadmill that can be placed under a desk.</p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-working-from/1.webp" alt="Pasted image 20250923115657.png"></p>
<p>I tried the standing desk, and it helped with my back, but I found it quite exhausting to stand the whole day. It’s, of course, a bit of getting used to, but after a year, I stopped doing it.</p>
<p>I went back to sitting for some time, but despite working out regularly, the back pain came back.</p>
<p>Then, when we moved to New Zealand, I had to get something new anyway, and as it sometimes happens, I stumbled into a whole new world by accident.</p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-working-from/2.webp" alt="Pasted image 20250923120814.png"></p>
<p>Now, after a year of working from the floor, my lower back pain has completely disappeared.</p>
<p>A floor desk doesn’t need to be anything fancy. I started out with a simple bedside table on which I placed my laptop.</p>
<p>Since then, I’ve upgraded to one of these stand-up desk extensions. They are meant to be placed on top of your normal desk to turn it into a stand-up desk, but they work well on the floor, too.</p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-working-from/3.webp" alt="IMG_7369.jpeg"></p>
<p>I sit cross-legged, then frequently switch to other positions. It takes time to get used to, but my lower back pain is all but gone.</p>
<h2>Why could sitting on the floor help your back?</h2>
<p>I’m no expert, got no medical education, but here is my layman’s take.</p>
<p>I have young kids, and that means spending a lot of time at their height. You’ll be squatting, sitting on the floor, lying down, and so on. As a result, young parents who are used to this have better flexibility in getting up and down from the floor.</p>
<p>It’s like with many things; if you look back 20,000+ years or even longer, you notice that our bodies likely aren’t meant to be doing what they are these days.</p>
<p>Our ancestors were most certainly also sitting a lot, but not on comfy chairs, sofas or lying on soft mattresses. It’s easy to see then why all of this soft and comfy causes issues.</p>
<p>From an evolutionary perspective, we’re not used to it.</p>
<p>The body is hyper-efficient.</p>
<p>If muscles aren’t needed, the body removes them. Stop working out for a while, and you’ll see.</p>
<p>In our everyday lives, however, this is much more critical. These are not just bigger biceps to look good; these are the lower back muscles that support our whole skeleton when standing, walking, or sitting upright.</p>
<p>If muscles can’t fully carry the body, bones and tissues will, and that sounds like running an engine without oil. It’ll work for some time, but it will quickly run into issues.</p>
<p>I’m not an expert, but I’m trying to tackle this with common sense. I was sitting on comfy chairs or sofas, sleeping on soft mattresses and that over time reduced my muscle mass here, leading to back pain.</p>
<p>Now that I’ve forced myself to “exercise” these muscles again by sitting on the floor, over time, the muscle mass in my back and core has rebuilt, so that I can not only sit on the floor without pain, but my lower back also won’t hurt anymore during the day.</p>
<p>This gain is quickly lost. I’m currently visiting my family and don’t have my floor desk, so I’ve noticed that the back pain is returning after sitting on chairs for too long.</p>
<h2>Science behind sitting on the floor</h2>
<p>A popular health check that physicians do to assess general fitness and flexibility is whether you can get up from the floor without using your hands. At 36, I’m glad to say that I can still pull this off, and I feel that when sitting on the floor, these same muscles are being trained.</p>
<iframe src="https://www.youtube-nocookie.com/embed/q7RWL8d5QF4" width="728" height="409" title="YouTube video" loading="lazy" allowfullscreen></iframe>

<p>Research shows that a proper floor posture, which you’ve gotten used to, <a href="https://www.uprightpose.com/blog/sitting-on-the-floor-posture-health-benefits/">activates 40% more stabilising muscles</a>. That’s a whole workout. It makes sense. When you start, you likely won’t be able to sit for long periods. With practice though, you train your muscles to maintain an upright posture while sitting, and this has an impact on other aspects of your day. When you stand up, sit on the couch or go for a walk, these new muscles will improve your overall posture and hopefully reduce pain.</p>
<p>FloorDesk companies like <a href="https://lowdesk.com/">https://lowdesk.com/</a> claim a whole set of benefits.</p>
<blockquote>
<p>Here are the top benefits of sitting on the floor:</p>
<ul>
<li><p><strong>Increased Flexibility</strong>: Promotes flexibility in hips, knees, and ankles, especially helpful for those with sedentary lifestyles.</p>
</li>
<li><p><strong>Better Posture</strong>: Engages core muscles and encourages a straight back, supporting natural spinal alignment.</p>
</li>
<li><p><strong>Improved Circulation</strong>: Frequent position changes while floor sitting help prevent prolonged pressure and boost overall circulation.</p>
</li>
<li><p><strong>Stronger Core</strong>: Balancing on the floor activates and strengthens core muscles, improving stability.</p>
</li>
</ul>
</blockquote>
<p>You likely won’t see these in any offices, but for a home office setup, there is almost no difference from a normal desk. Lowdesk is super expensive, so I’m waiting for some cheap stuff from China, but the idea of moving from floor to standup is quite cool.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Paying rent by selling covered calls?</title>
      <link>https://www.learnedlate.com/writing/paying-rent-by-selling-covered-calls</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/paying-rent-by-selling-covered-calls</guid>
      <pubDate>Tue, 23 Sep 2025 00:00:00 GMT</pubDate>
      <description>I look at selling covered calls to pay rent instead of selling assets. I explain how they work, the opportunity cost, and the calculator I built.</description>
      <content:encoded><![CDATA[<p>My <a href="https://podcast.thecoveredcallpod.com/about?hide_intro_popup=true">good friend Jason from the covered call</a> has been telling me about his income-generating strategy of selling covered calls for a while, and I never bothered because I was building a business and making income.</p>
<p>For the longest time, my idea was to hold on to my Bitcoins, Gold, etc. and focus on the capital gains.</p>
<p>Now, I&#39;m in a different position. I&#39;m starting something new, and without income, sooner or later, I&#39;ll have to start selling off assets. Until now, I&#39;ve had enough cash and stuff in my portfolio that I wanted to sell anyway, but slowly, I&#39;m getting to the assets that I have a hard time selling.</p>
<p>I could get a job, but I enjoy this game of exploring how all this new tech will work, trying out different business ideas and spending time writing a bit more.</p>
<p>That&#39;s where Jason&#39;s strategy of making money with money came back to mind. I&#39;m still bullish on BTC and Gold and don&#39;t want to sell these for dividend-generating stocks or ETFs.</p>
<p>I&#39;ve spent the last couple of days diving a bit deeper into this and want to try and wrap my head around it here in a simple non-financial expert tone.</p>
<h2>How does a covered call work?</h2>
<p>A call option is buying a ticket.</p>
<p>A ticket that you CAN use to buy shares at a set price.</p>
<p>The ticket expires at a set date.</p>
<p>Say a ticket to buy TSLA at $450 next Friday is $5. TSLA is currently at $430.</p>
<p>If before the expiry date the price of the shares goes beyond the price on the ticket you CAN buy the shares cheaper with your ticket. So if TSLA moved to $460, you could buy the shares from the ticket seller for $450.</p>
<p>If the share price does not move beyond the set price, then the ticket expires worthless, and you&#39;ve wasted $5 on the ticket.</p>
<p><img src="https://www.learnedlate.com/images/writing/paying-rent-by-selling-covered-calls/1.webp" alt="Call option payoff chart at expiration with a $450 strike and a $430 current price"></p>
<p>Pretty cool strategy if you&#39;re bullish on something and the ticket isn&#39;t too expensive.</p>
<p>A covered call now means selling the ticket instead of buying it.</p>
<p>This is risky, as you would have to cover the cost of selling the shares at a much lower price to fulfil the ticket obligations. The buyer of the ticket CAN buy the shares at a set price, so if that price doubled, you, as the seller, would have to deliver the expensive shares.</p>
<p>If TSLA were to go to $900, you&#39;d owe the difference to the price set in the ticket. The downside for you, in theory, is unlimited, as share prices can go up a lot.</p>
<p>To mitigate risk, you can hold the shares you are selling tickets for. So you collect money for the ticket, and in case the buyer wants the shares, you can sell your shares (they would have gone up too).</p>
<p>In this case, you can hand over the $900 TSLA shares and don&#39;t incur any real loss while pocketing the $5 ticket price.</p>
<p>That&#39;s the main risk.</p>
<p>If the shares you are selling covered calls for run up in price too much, you miss out on gains.</p>
<p>Opportunity cost.</p>
<p>In the scenario above, you made $5, but by simply holding TSLA, you could have made $450.</p>
<p>Ideally, you&#39;d want something that doesn&#39;t move up or down too much, but instead moves sideways.</p>
<h2>Key Parameters</h2>
<p>I&#39;ll start with an example.</p>
<p><img src="https://www.learnedlate.com/images/writing/paying-rent-by-selling-covered-calls/2.webp" alt="TSLA analysis card: price $426, 100 shares, volatility 69%, recommended $485 covered call with $962 premium"></p>
<p>Here, we suggest selling a covered call to buy TSLA at $485, expiring on October 12 (at the time of writing, this is 21 days out).</p>
<p>The ticket would be worth $962 (the premium).</p>
<p>Based on the current market volatility, the risk of assignment (TSLA moving to ~ $490 so the ticket buyer would want to buy the shares) is 19.9%.</p>
<p>Annualised, this strategy could yield 39.2% or 0.8% weekly.</p>
<p>Now, this is a rough estimate, but it paints the picture that if you hold 100 TSLA shares, you could make some additional money, and it might be a profitable strategy IF TSLA doesn&#39;t move too much.</p>
<p>100 TSLA shares would be worth $42,600, and if I continued to find these opportunities throughout the year, the 39% return could accumulate to approximately $16k, which is almost my annual rent.</p>
<h2>What could go wrong?</h2>
<p>Now the potential gains sound juicy, so what&#39;s the catch?</p>
<p>Opportunity cost.</p>
<p>Don&#39;t let the chart below overwhelm you. It illustrates how a covered call with specific parameters would compare to holding Bitcoin outright.</p>
<p>To be honest, it would have been a poor choice to sell covered calls on Bitcoin in this scenario.</p>
<p><img src="https://www.learnedlate.com/images/writing/paying-rent-by-selling-covered-calls/3.webp" alt="Four charts comparing a Bitcoin covered call strategy with buy and hold from 2020 to 2025"></p>
<p>You&#39;d be making money, yes, but you&#39;d be making way more money by just holding Bitcoin.</p>
<p>The red dots on the second chart above show the assignments of our calls, i.e., Bitcoin went above the strike price of that covered call. Every time that happens, our opportunity cost stacks up. The fee is nice, but it does not cover the rise of Bitcoin itself.</p>
<p>On top of that, if you have to sell your $460 TSLA calls, while the price went up to $480, you don&#39;t just miss out, but when you want to buy back in, you need more money to get back to the same position.</p>
<p><img src="https://www.learnedlate.com/images/writing/paying-rent-by-selling-covered-calls/4.webp" alt="Chart “Holding vs. Selling Covered Calls” with profit capped above the $460 strike"></p>
<h2>Getting back into the trade</h2>
<p>Here is where picking the right asset for this gets important. If it goes up too quickly, then it&#39;s not going to work well, but if the asset is volatile and sideways, then it might work well.</p>
<p>Say you got assigned, had to sell your shares, and they went up another 20%. You could suck it up and buy back in with the loss to continue the strategy, but that would likely be even worse.</p>
<p>The alternative strategy is to sell a cash-secured put.</p>
<p>A put is pretty much a bet in the other direction. You buy a ticket to buy shares at a lower price.<br>Say TSLA is $450, and you sell a ticket to buy them at $440.</p>
<p>Similar to the covered call, you&#39;ll collect a fee for the ticket, and if you are assigned (i.e., the shares move beyond the defined price), you will have to buy the shares at $440.</p>
<p>If your covered calls ran away from you, this is a good bet to try and get back in at a cheaper price, while collecting the ticket fees.</p>
<p>The risk again is opportunity cost. If the shares move to $400, you&#39;ll have to buy them at $440.</p>
<p>Once you got assigned (i.e., you had to buy the shares), you&#39;d switch back to covered calls.</p>
<p>As you may have figured by now, this is a strategy that works well with shares that move sideways or slowly upward.</p>
<p>You play the game to collect the fees and shouldn&#39;t mind holding these assets for some time.</p>
<h2>Picking the best asset</h2>
<p>My primary concern with the covered call strategy in general is that an asset might completely run away from me (down or up).</p>
<p>Say you started this with Bitcoin at $60k. It&#39;s now trading somewhere above $100k for at least the last 6 months, so you wouldn&#39;t have been able to get back into the trade for that whole time without paying a higher entry price.</p>
<p>That&#39;s a significant risk.</p>
<p>However, I am facing a choice right now: sell my shares to pay for living expenses, or hold them and generate income. There is some risk of not making as much as with holding, but the alternative is to sell assets straight out for cash.</p>
<p>For that, a covered call strategy seems to be a nice option if you prefer not to go down the degen path (<a href="https://ethena.fi/">Ethena</a> offers 8% APY holding a coin that is backed by BTC/ETH).</p>
<p>While exploring all of this, I built a little calculator to help me understand the assignment risk, potential premiums, and quickly compare different strategies. You can try it out under <a href="https://www.daystoexpiry.com/">Days to Expiry</a> to get you started.</p>
<p><img src="https://www.learnedlate.com/images/writing/paying-rent-by-selling-covered-calls/5.webp" alt="Recommended covered call strategies at $455, $460 and $465 strikes with ROI and assignment risk"></p>
<p>Here&#39;s where personal preferences, risk appetite, etc., come into play. I&#39;m going to play around with this over the next months and report back on how it&#39;s working. My goal is to apply this strategy with as little effort as possible and be able to at least pay rent with the yields.</p>
<p>How will it compare against holding Bitcoin? I don&#39;t know. It really depends on the risk I&#39;m willing to play here and whether Bitcoin moves sideways or not.</p>
<p>If I take on a moderate risk, the return isn&#39;t as great as TSLA (1.5% weekly). I&#39;d be buying the IBIT as iShares has a decent reputation, the fees are low, and you can buy options.</p>
<p><img src="https://www.learnedlate.com/images/writing/paying-rent-by-selling-covered-calls/6.webp" alt="Best ROI card: $70 strike expiring 2025-10-31, $136.40 premium, 20.5% ROI"></p>
<p>More risk, of course, brings more reward here, but still not as good as TSLA and others.</p>
<p><img src="https://www.learnedlate.com/images/writing/paying-rent-by-selling-covered-calls/7.webp" alt="Best ROI card: $65 strike expiring 2025-10-24, $263.02 premium, 48.5% ROI, 43.2% assignment risk"></p>
<p>So maybe it&#39;s better to sell some Bitcoin and buy some random company that fits the profile to somehow stay invested, but farm these premiums.</p>
<p>One could try and read the tealeaves here, but who the knows. In a good year, the return from covered calls won&#39;t beat Bitcoin.</p>
<p><img src="https://www.learnedlate.com/images/writing/paying-rent-by-selling-covered-calls/8.webp" alt="Table of yearly Bitcoin returns from 2010 to 2024"></p>
<p>In a bad year, it might, but that&#39;s not the point.</p>
<p>My alternatives are</p>
<ol>
<li><p>selling some Bitcoin to pay rent</p>
</li>
<li><p>accepting the risk of opportunity cost by selling covered calls on the IBIT with lower returns</p>
</li>
<li><p>selling Bitcoin for a higher-yielding covered call asset, but that also means opportunity cost, but potentially higher yields</p>
</li>
</ol>
<p>Haven&#39;t decided on Bitcoin yet, but have sold some calls on other holdings. Will keep you posted how it goes.</p>
<p>(the screenshots above are from a little tool I build to find the best covered calls - you can find it on <a href="https://www.daystoexpiry.com/">Days to Expiry</a> )</p>
]]></content:encoded>
    </item>
    <item>
      <title>Rediscovering the known - Filter Coffee</title>
      <link>https://www.learnedlate.com/writing/rediscovering-the-known-filter-coffee</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/rediscovering-the-known-filter-coffee</guid>
      <pubDate>Sat, 13 Sep 2025 00:00:00 GMT</pubDate>
      <description>I grew up with filter coffee in Germany, went through a Moka pot, and now brew with a Hario V60 Switch. Here's my recipe and how Gemini helped dial it in.</description>
      <content:encoded><![CDATA[<p>Growing up in Germany, filter coffee used to be pretty much the only way to make coffee at home.</p>
<p>Filter papers, ground coffee, and water dripping through the coffee to create a nice pot of coffee.</p>
<p>Most people will be somewhat familiar with filter coffee, and while I can&#39;t find any pictures from our 90s kitchen, this is how it might have looked.</p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-filter-coffee/1.webp" alt="90s filter coffee machine used at home"></p>
<p><em>90s filter coffee machine used at home</em></p>
<p>When I got older, my parents replaced our filter coffee machine with a more automatic machine (pre-made pads that brew a quick cup), and it was two things: 1) an upgrade for ease of use and 2) a downgrade for taste.</p>
<p>It now only took seconds to make a coffee with a little sachet of pre-ground coffee compared to the minutes it took to prepare a batch of filter coffee, but the taste wasn’t as good.</p>
<p>My first own machine was one of these, eventually upgrading to a french press, a fully automated brewer and then a Moka pot.</p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-filter-coffee/2.webp" alt="Classic Moka pot coffee maker"></p>
<p><em>classic Moka pot coffee maker</em></p>
<p>Whenever I go to a cafe, however, I look for a filter coffee; a filter coffee from a machine will do.</p>
<p>It&#39;s just so clean and smooth, easier not to screw up, and the clarity brings out the flavour when drinking it without milk, which I do.</p>
<p>My absolute favourite way to drink coffee.</p>
<p>Particularly in coffee shops in Australia and New Zealand, where large espresso machines are calibrated to produce strong espressos that pair well with milk in a cappuccino. Drinking them as long blacks (espresso + hot water), without milk, is often quite unpleasant (unless the coffee shop is really, really good).</p>
<p>At home, however, I stuck to the Moka pot because of the simplicity of not having to buy a big filter machine or an espresso machine.</p>
<p>For the longest time, that is.</p>
<p>I switched to filter coffee at home about a year ago and feel like I&#39;ve rediscovered something. I like the setup so much, I thought I&#39;d share it.</p>
<h2>How I make coffee at home these days</h2>
<p>Being somewhat of a minimalist, I don&#39;t like the idea of owning a lot of stuff, especially not the big, bulky stuff. This kept me from buying a simple filter machine like a Moccamaster for years.</p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-filter-coffee/3.webp" alt="Popular Moccamaster filter coffee machine"></p>
<p><em>popular Moccamaster filter coffee machine</em></p>
<p>I had heard of the Hario V60 but was intimidated by it and worried that it would take too much time to make coffee with it every day. It sure produces great coffee, but has kind of a steep learning curve.</p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-filter-coffee/4.webp" alt="Hario's famous V60 filter brewer"></p>
<p><em>Harios famous V60 filter brewer</em></p>
<p>Then I found this hybrid thing, it&#39;s a Hario V60, but has a little switch to let coffee through or not. The experts claimed it would be easier and more consistent to brew good coffee with.</p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-filter-coffee/5.webp" alt="Hario V60 plus switch to simplify brewing even more"></p>
<p><em>Hario V60 + switch to simplify brewing even more</em></p>
<p>The thing is super small, and I needed almost no other gear, so I was sold.</p>
<p>In the most basic setting, it works like this:</p>
<ol>
<li><p>Add a filter to the brewer</p>
</li>
<li><p>Add ground coffee and hot water, and let it &quot;steep&quot; for some time</p>
</li>
<li><p>Open the switch to pour out coffee</p>
</li>
</ol>
<p>This is very similar to a french press, but the coffee gets run through a filter before you drink it, making it just a little cleaner and smoother.</p>
<p>This, however, is just the most basic setting, and there are an endless number of parameters that have the potential to unlock even more flavour.</p>
<h2>Scratching the surface</h2>
<p>Almost a year after I started to make filter coffee at home and improving my skills, I visit a local cafe and to my surprise find that they offer V60 filter coffee. I hardly ever visit cafes, so I order one.</p>
<p>My expectations were low - I&#39;ve had crappy filter coffee before, but by this, I was absolutely blown away.</p>
<p>It was a fragrant cup, clear like tea, fruity, complex and delicious, but still coffee.</p>
<p>My first thought was holy shit, that barista must be orders of magnitude better than I am, brewing such a cup, and maybe he was.</p>
<p>On the way out, I take a look at the beans and find one of the likely reasons for this incredibly tasty coffee. A 200g bag of Ethiopian beans that cost NZD $40.</p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-filter-coffee/6.webp" alt="Expensive but good coffee: Grey Roasting Co. Koke Shalaye, Ethiopia natural anaerobic, 200g from $40.00"></p>
<p><em>expensive but good coffee</em></p>
<p>Aside from good beans, however, there are so many other parameters that will influence how a filter coffee tastes: softness of your water, bean freshness, bean roast level, bean grind size, grind particle size distribution, water temperature, water pour height, steep time, and number of pours, just to name a few.</p>
<p>Like with anything, the more time you spend doing something, the more you learn how little you know. Same with filter coffee.</p>
<p>Now that I know what&#39;s possible, I&#39;m hooked to learn enough to be able to one day make a batch of that $40 coffee at home. Before I buy a bag, though, I&#39;d better practice not stuffing things up.</p>
<p>If I grind the beans too coarse, it could lead to under-extraction of the coffee, resulting in a sour, weak, or bland cup. Grind too fine, however, and I run the risk of making it all bitter, killing these fruity flavour notes.</p>
<p>Endless ways of screwing up here, and every coffee has it’s own kind of recipe to make.</p>
<h2>Blueberry coffee</h2>
<p>I&#39;m not quite in the league of $40 coffee bags yet, but in a recent attempt to dial in a new pack of beans, I managed to do quite well.</p>
<p>AI, of course, played a role here, and I found that Gemini is quite good at helping you dial in coffee. I give it an image of the bag of beans I bought, tell it the equipment that I have, the age of the beans, and the directions I want things to go.</p>
<p>In this case, the label said blueberry jam and so I asked for a clean fruity cup to bring out these flavours and with just two iterations, I managed to get it dialled in to near perfect.</p>
<p>The brewed coffee smells like a bowl of blueberries, but has this deep interesting coffee taste.</p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-filter-coffee/7.webp" alt="Ozone coffee bag for Ethiopia Mensur Abahika with blueberry jam tasting notes"></p>
<p><em>coffee taste profiles</em></p>
<p>An experienced barista would have been able to figure it out with just pure experience. Still, as a relative novice, it was pretty cool to tap into this crowd wisdom and dial in a great cup with very little iteration.</p>
<p>For those of you who know even less than I do, here&#39;s my recipe:</p>
<ol>
<li><p>Grind the beans to medium fine (28 clicks on my 1Zpresso J grinder)</p>
</li>
<li><p>Boil some filtered water (i don&#39;t have a temperature-controlled kettle, but the gooseneck kettle has made it so much better, since it restricts the flow rate when you pour and agitates the coffee less)</p>
</li>
<li><p>Add the ground coffee to the Hario Switch (into the filter paper)</p>
</li>
<li><p>Open the switch and pour in 60 grams of water in a circular motion (don&#39;t agitate the ground coffee too much)</p>
</li>
<li><p>At 30s close the switch and pour in the remaining water (240g total, so add 180g). Try to do this slowly so that you&#39;re finished at 1m</p>
</li>
<li><p>At 1m 45s, open the switch and let the coffee drain</p>
</li>
</ol>
<p>This sounds like a lot of work, but once you&#39;ve done it a few times, it&#39;s actually quite automatic, and the resulting coffee is totally worth it. In todays stressful lives, there is beauty in taking time to craft something good.</p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-filter-coffee/8.webp" alt="Hand grinder and a V60 filled with coffee grounds on a scale, honing my skills at home"></p>
<p><em>honing my skills at home</em></p>
<p>This got me thinking what it would take to get to that perfect cup even faster, more easily accessible for people.</p>
<p>I was tinkering with a little price comparison app for New Zealand specialty coffee and so I added a feature to suggest how to brew particular beans.</p>
<p>It’s just a little prototype for myself, but maybe there are some coffee-lovers out there who find it useful.</p>
<p><a href="https://coffee.learnedlate.com/">https://coffee.learnedlate.com/</a></p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-filter-coffee/9.webp" alt="Coffee price comparison app listing Ozone bags: Half Caff Blend, Limoncillo Natural and Tablon de Gomez"></p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-filter-coffee/10.webp" alt="Same app with a Mensur Abahika detail panel showing pricing and an Ethiopia regional price comparison"></p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-filter-coffee/11.webp" alt="Same app with a brewing guide form and generated Hario Switch recipe for Mensur Abahika"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Good Dopamine, bad Dopamine</title>
      <link>https://www.learnedlate.com/writing/good-dopamine-bad-dopamine</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/good-dopamine-bad-dopamine</guid>
      <pubDate>Tue, 05 Aug 2025 00:00:00 GMT</pubDate>
      <description>I split dopamine into cheap and earned. These are the purpose and guardrails I use to choose the earned kind, from Cold Turkey to no chocolate at home.</description>
      <content:encoded><![CDATA[<p>Scrolling through Twitter for thirty minutes or going for a thirty-minute run each produces dopamine. Yet both have a very different effect.</p>
<p>Seeing likes, messages, and short-form content is nice for the brain. Otherwise, we wouldn&#39;t all spend so much time doing it, and we wouldn&#39;t all be a little addicted to it.</p>
<p>Both activities tend to release dopamine. Anyone, however, who has ever achieved something that also took effort or required work knows that the dopamine from the work or effort hits very, very differently.</p>
<p><img src="https://www.learnedlate.com/images/writing/good-dopamine-bad-dopamine/1.webp" alt="Drake meme rejecting “cheap dopamine” and approving “earned dopamine”"></p>
<p>In a nutshell, here&#39;s the difference:</p>
<p><strong>cheap dopamine</strong>: instant, passive, temporary, e.g., getting likes on Twitter.</p>
<p><strong>earned dopamine</strong>: delayed, requires effort, lasting, e.g., improving fitness after working out for a year.</p>
<p>The earned dopamine goes deeper and lasts, but it also takes time to materialise, and that&#39;s a problem.</p>
<h2>The Allure Of Cheap Dopamine</h2>
<p>Historically, cheap dopamine wasn&#39;t so readily available. Our brains seemed to be wired for whatever you could find. If you find a blueberry bush in the woods, the dopamine created will lead to you remembering where it was because it felt so good. You likely also smashed through as many as you could. But being out in the woods 20,000 years ago wasn&#39;t without risk. Ask any grizzly bear.</p>
<p>Today, instant, cheap dopamine is everywhere. No risk, no effort required. You pay later, though.</p>
<p>In my early twenties, I spent a lot of time playing World of Warcraft. It was the greatest thing. I still think back sometimes and contemplate trying it out again. The feeling of levelling up, gearing up your character and then winning games against other players involved a lot of dopamine. It felt great in that moment. It was addictive.</p>
<p>But the moment you stopped, it felt bad, and you wanted to get back to it.</p>
<p>It had almost zero lasting impact, but I could be lazy and happy.</p>
<p>Only when zooming out, we will see that spending our time on working out, reading books, or learning any other useful skill has a far longer-lasting impact.</p>
<p>If you play World of Warcraft three times a week for four months, you don&#39;t have much to take away from it. If you spent that same time working out instead, even if you stopped, a lasting positive feeling would stay for much longer.</p>
<p>If you go for the cheap, short-lived dopamine, however, it might be nice in the moment, but you will not have that deep feeling of knowing how to do something or that deep feeling of being content because you have worked your way through challenges.</p>
<h2>Compounding Cost</h2>
<p>But why not just keep going on the cheap dopamine? It&#39;s free, easy, and makes me happy.</p>
<p>I remember back in my Uni days. I was working full-time and hitting uni in the evening. On the way home around 9, we&#39;d stop at a burger joint to have dinner. After a couple of weeks, I felt terrible, didn&#39;t sleep well and also gained some weight.</p>
<p>It&#39;s the cheap dopamine hit of that salty fatty food, but the aftereffects compound and quickly influence other areas of our lives.</p>
<p>The short-lived pleasure of the burger was creating a long-term deficit in my well-being. The same is true for binge-watching Netflix all Sunday instead of taking a walk, or ordering takeout instead of learning to cook. It&#39;s a deal that feels good upfront, but leaves you poorer in the long run.</p>
<p>In investment terms, people talk about opportunity cost.</p>
<p><img src="https://www.learnedlate.com/images/writing/good-dopamine-bad-dopamine/2.webp" alt="Investopedia graphic defining opportunity cost, with a traveller at a fork in the road"></p>
<p>If you spent the time reading about investing, instead of watching Netflix, what would your life look like then?</p>
<p>By living off cheap dopamine, we are taking away from our potential to do something that creates lasting contentment and a sense of meaning.</p>
<h2>Purpose and Guardrails</h2>
<p>Knowing that cheap dopamine is a trap is a good start, but resisting it in the moment is a different story.</p>
<p>The answer isn&#39;t just more discipline. It seems to come down to two things: having a reason to bother (purpose) and the guardrails in place for when discipline and motivation go overboard.</p>
<p>Simply thinking about how good I will feel after the workout often isn&#39;t enough. To me, linking an activity to a higher-level goal (<a href="https://www.learnedlate.com/writing/beyond-the-big-wins-unpacking-the">check out my deep dive here</a>) is what can make the difference.</p>
<p>The chore of writing cold emails only becomes tolerable when I frame it as the direct alternative to returning to a corporate job I don&#39;t want. One choice moves me closer to freedom; the other moves me further away. That clarity helps.</p>
<p>That&#39;s the purpose of a higher-level goal.</p>
<p>But what if that framing fails and binge-watching YouTube becomes too tempting?</p>
<p>Here is where guardrails come in. Some people think I&#39;m really disciplined, and I might be a little more than average, but I&#39;ve also been building systems that help me when I&#39;m not disciplined.</p>
<p>I&#39;ll smash through a bar of chocolate when I&#39;m hungry, no problem. I just never have any at home.</p>
<p>I&#39;ll get distracted by YouTube, but use apps like Cold Turkey to block out periods of work and focus.</p>
<p><img src="https://www.learnedlate.com/images/writing/good-dopamine-bad-dopamine/3.webp" alt="Cold Turkey blocker page reading “This website is blocked.” with an Anais Nin quote"></p>
<p>I didn&#39;t go for runs at all because it always took so long. Now I go two to three times a week by cutting down the time to just 30 minutes.</p>
<h2><strong>The Fisherman&#39;s Point</strong></h2>
<p>There&#39;s always a risk, when talking about this stuff, of sounding like the <a href="https://www.learnedlate.com/writing/the-fishermans-dilemma-why-enough">businessman in the old parable, telling the fisherman</a> to work relentlessly now for a payoff that might come decades later.</p>
<p>That&#39;s not what this is aiming for. There is a difference. The fisherman lives in the moment and genuinely seems to be enjoying life. The fisherman isn&#39;t doomscrolling Twitter, TikTok or Instagram to get his dopamine. He seems to derive his happiness from being in the moment, enjoying time with friends.</p>
<p>The point is not to avoid pleasure, joy and happiness completely; it&#39;s distinguishing between cheap and earned dopamine and knowing where your contentment comes from.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Simple Automation Workflows</title>
      <link>https://www.learnedlate.com/writing/simple-automation-workflows</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/simple-automation-workflows</guid>
      <pubDate>Thu, 31 Jul 2025 00:00:00 GMT</pubDate>
      <description>I use Claude Code in VS Code for non-coding work like Reddit replies and SEO posts, driven by plain context files. This is the simple setup I use.</description>
      <content:encoded><![CDATA[<p>When I started my software developer apprenticeship 20 years ago, the terminal and command line weren&#39;t even cool anymore. The tech here is so old.</p>
<p><img src="https://www.learnedlate.com/images/writing/simple-automation-workflows/1.webp" alt="Gemini CLI start screen with getting-started tips in a VS Code terminal"></p>
<p>Only some of the older folks still knew how to use them. But I joined a team that took care of setting up and running the backend services, and these would run on Linux, so I found my way into using the command line.</p>
<p>I actually quite liked it. It’s practical and faster once you’ve figured out how to use it.</p>
<p>I would have never thought that 20 years later, we&#39;d get back to making the command line cool again. Enter Claude Code and Gemini CLI.</p>
<h2>Why Command Line is Cool Again</h2>
<p>If you&#39;ve been reading my posts, you&#39;ve probably heard about Cursor. It&#39;s this development environment (basically a glorified text editor) that integrates deeply with Claude, ChatGPT, etc.</p>
<p>It&#39;s so powerful as it will implement whole features, by editing a bunch of different files, just based on a prompt.</p>
<p><img src="https://www.learnedlate.com/images/writing/simple-automation-workflows/2.webp" alt="Code editor with a code diff in subscriptionService.ts next to an AI chat panel"></p>
<p>The company behind Claude Sonnet and Opus, currently the best coding models, has released a command-line interface. So has Google Gemini.</p>
<p>It does pretty much what Cursor does. It edits text files, searches folders and aside from that does anything else your typical AI model would do.</p>
<p>You simply open it within a folder of your editor, reference some files and tell it what to do. It will then search, edit files and run other commands.</p>
<p>I use it for coding, and it&#39;s great, but recently I&#39;ve been using it for a bunch of other automations.</p>
<h2>Command Line beyond Coding</h2>
<p>Think of something like this:</p>
<ul>
<li><p>Finding Reddit posts that fit a certain topic, drafting replies and dropping my product name while creating a helpful reply</p>
</li>
<li><p>Researching a German industry website for engineering companies in Germany that are between 5 and 100 employees, to extract the emails of their leadership team for cold outreach</p>
</li>
<li><p>Creating blog posts for my various sites that I run to improve SEO.</p>
</li>
</ul>
<p>Basically anything that involves a deeper level of instructions, a workflow or a more structured output.</p>
<p>If you&#39;re somewhat of a power user, you&#39;d think: that&#39;s what Claude Desktop Projects, and ChatGPT custom GPTs do, and you&#39;d be right.</p>
<p>My problem with these projects is that they are fiddly and inflexible.</p>
<p>You can&#39;t simply move between models; you swap between Claude and ChatGPT without manually transferring your prompts and context.</p>
<p>Moving is important as these companies constantly release new stuff, and you don&#39;t want to end up on a lifetime subscription with one of them. Things are moving so fast that even incumbents will be disrupted.</p>
<p>The problem is that using projects in a desktop client means the client maintains an internal structure, which you likely don&#39;t have good access to, can&#39;t easily migrate, or edit.</p>
<p>That&#39;s why I&#39;ve moved to using a very coding-style approach.</p>
<h2>Setting up a development environment</h2>
<p>This might sound overwhelming to some of you, but bear with me, it&#39;s really simple.</p>
<p>Remember, a development environment is just a glorified text editor with a Finder-like folder browser on the side.</p>
<p>The command-line interface is then just a little app that lets you prompt it just like you do with any AI app.</p>
<p>Here’s what you need to try it.</p>
<p><a href="https://code.visualstudio.com/">VS Code</a>, <a href="https://marketplace.visualstudio.com/items?itemName=anthropic.claude-code">Claude Code extension</a> and either a <a href="https://www.anthropic.com/claude-code">Clode Code subscription</a> or Claude Pro. Alternatively, you can try it out with Gemini (they have a limited trial).</p>
<p><img src="https://www.learnedlate.com/images/writing/simple-automation-workflows/3.webp" alt="Claude Code welcome screen with login method options inside a code editor"></p>
<p>No, open up VS Code and create a simple folder structure like this.</p>
<p><img src="https://www.learnedlate.com/images/writing/simple-automation-workflows/4.webp" alt="VS Code explorer tree of an automation folder with general, mcp, output and projects directories"></p>
<p>It’s got different folders for generic, reusable context and more specific context. That context is what you can then reuse and refer to in your prompts.</p>
<p>Let&#39;s take the Reddit workflow.</p>
<p>Similar to Claude Desktop, you&#39;ll need to install <a href="https://github.com/Hawstein/mcp-server-reddit">an MCP like</a> this to access Reddit. It&#39;s just an entry in .mcp.json (you can ask Clode Code to help you set it up)</p>
<pre><code>&quot;reddit&quot;: {
&quot;command&quot;: &quot;~/01_code/automation/mcp/reddit-mcp/.venv/bin/python&quot;,
&quot;args&quot;: [
&quot;-m&quot;,
&quot;mcp_server_reddit&quot;
],
&quot;cwd&quot;: &quot;~/01_code/automation/mcp/reddit-mcp&quot;
},
</code></pre>
<p>I keep a folder for my generic kind of input, such as brand voice, and the folder structure you&#39;d like Claude/Gemini to follow.</p>
<p><img src="https://www.learnedlate.com/images/writing/simple-automation-workflows/5.webp" alt="brandvoice.md open in VS Code describing brand voice characteristics, with the folder tree on the left"></p>
<p>Add more generic stuff, such as outlining rules for Reddit - here are some.</p>
<p><img src="https://www.learnedlate.com/images/writing/simple-automation-workflows/6.webp" alt="reddit_marketing.md open in VS Code with “Reddit Marketing: Essential Key Points” and golden rules"></p>
<p>And lastly, your set of actual instructions.</p>
<p><img src="https://www.learnedlate.com/images/writing/simple-automation-workflows/7.webp" alt="reddit_promo.md open in VS Code with numbered instructions for searching Reddit and suggesting replies"></p>
<p>The idea is to create this once and tweak it from then on, or if you get it right, not touch it at all.</p>
<p>Once you have this set up, you open up Claude Code/Gemini and, using @, mention all the files you want it to have in context. Off it goes, doing whatever you wanted it to do.</p>
<p><img src="https://www.learnedlate.com/images/writing/simple-automation-workflows/8.webp" alt="Claude Code terminal prompt asking for Reddit promo content using @-referenced files"></p>
<p>The benefit here is that, with all that context, you&#39;ve set it up for a much better result, as it knows what to do.</p>
<p><img src="https://www.learnedlate.com/images/writing/simple-automation-workflows/9.webp" alt="Claude Code reading the referenced files and writing a todo list"></p>
<p>If you don&#39;t like the result, you can simply tweak the files and try it again.</p>
<p>Now you could go even further and turn these prompts into reusable scripts that you might even want to schedule. I do this manually, but here&#39;s what I&#39;m thinking</p>
<ol>
<li><p>Scan your website&#39;s blog section for all the content you&#39;ve covered.</p>
</li>
<li><p>Find some good keywords that fit in but haven&#39;t been covered.</p>
</li>
<li><p>Write a blog post and add it to your website</p>
</li>
<li><p>Do that once a week. Bang, you&#39;re SEO will gradually improve over time.</p>
</li>
</ol>
<p>Since I&#39;ve been doing this, I have significantly increased the presence of</p>
<p><a href="https://www.expensesorted.com/">https://www.expensesorted.com/</a></p>
<p><img src="https://www.learnedlate.com/images/writing/simple-automation-workflows/10.webp" alt="Google Search Console performance chart with 291 clicks, 32.2K impressions and average position 35.6"></p>
<h2>We&#39;re all figuring this out.</h2>
<p>There are way fancier, fully automated workflows, but these tend to be complex, hard to maintain and control.</p>
<p>Simple might be better here. These simple workflows help me a lot in my day-to-day, and this code-based approach in Visual Studio Code is my current daily driver.</p>
<p>This will most likely change down the line, but right now it gives good flexibility and full control over files.</p>
<p>There are even fancier command-line tools such as <a href="https://github.com/charmbracelet/crush">Crush</a> that let you use this command-line stuff, but quickly integrate with a large variety of different models.</p>
<p>GPT and Claude might be the most popular ones, but there is a constant stream of newer, better, cheaper, faster models emerging that you can play around with.</p>
<p><img src="https://www.learnedlate.com/images/writing/simple-automation-workflows/11.webp" alt="Z.ai tweet introducing GLM-4.5 and GLM-4.5-Air with pricing and a benchmark chart"></p>
<p>(<a href="https://x.com/Zai_org/status/1949831552189518044">source</a>)</p>
<p><strong>P.S.</strong> I&#39;m fascinated by the operational puzzles that businesses face. My consulting work is how I stay on the front lines, helping companies solve real-world technology challenges.</p>
<p>If you&#39;re wrestling with a particularly tricky process or a technical bottleneck in your own business, I&#39;m always open to a conversation. These chats are the most valuable part of my work. <a href="https://calendar.notion.so/meet/florianstrauf/chat">Feel free to book a brief, no-pressure call.</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Digital Marketing NZ: Small Business Guide (2026)</title>
      <link>https://www.learnedlate.com/writing/digital_marketing_nz_guide</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/digital_marketing_nz_guide</guid>
      <pubDate>Tue, 15 Jul 2025 00:00:00 GMT</pubDate>
      <description>Digital marketing NZ guide for small business: local SEO, social that converts, and a 30-day plan that wins customers without agency fees.</description>
      <content:encoded><![CDATA[<p>Digital marketing for small business NZ means using SEO, social, email, and local ads to win customers without an enterprise budget. This guide focuses on channels that fit Kiwi market size, compliance, and time-poor owners — not generic global theory.</p>
<p>Here&#39;s the reality: most New Zealand small businesses are drowning in digital marketing advice that doesn&#39;t fit their world.</p>
<p>The courses cost $840. The degrees take three years. But your customers are searching for your services right now, and you need results that matter to your bottom line - not academic theory.</p>
<h2>Why Most Digital Marketing Advice Fails NZ Small Businesses</h2>
<p>The educational institutions dominating &quot;digital marketing NZ&quot; searches are selling courses, not solutions. They&#39;re teaching theory while your competitors are capturing your customers online.</p>
<p>What&#39;s missing? Practical, results-focused digital marketing designed for the unique challenges of New Zealand businesses:</p>
<ul>
<li>Limited budgets compared to Australian or US markets</li>
<li>Smaller target audiences requiring precise targeting</li>
<li>Local compliance requirements (Privacy Act, Fair Trading Act)</li>
<li>Geographic spread challenges across North and South Islands</li>
</ul>
<h2>The Time-Efficient Approach to Digital Marketing ROI</h2>
<p>Your time is your most valuable currency. Every hour spent on ineffective marketing is an hour stolen from growing your business or living your life.</p>
<p><strong>The 80/20 rule for NZ small business digital marketing:</strong></p>
<p>20% of your digital marketing efforts will drive 80% of your results. Focus on these high-impact activities:</p>
<h3>1. Local SEO That Actually Works</h3>
<ul>
<li>Google My Business optimization (free, immediate impact)</li>
<li>Local directory listings (Yellow Pages, True Local, Localist)</li>
<li>Location-specific content targeting &quot;services in [your city]&quot;</li>
</ul>
<h3>2. Content Marketing With Purpose</h3>
<p>Instead of blogging about everything, create content that directly addresses your customers&#39; search queries:</p>
<ul>
<li>Answer the questions your customers ask during sales calls</li>
<li>Create comparison guides for your services vs competitors</li>
<li>Share local case studies and success stories</li>
</ul>
<h3>3. Targeted Social Media (Not Everything Everywhere)</h3>
<p>Choose one platform where your customers actually spend time:</p>
<ul>
<li><strong>B2B services:</strong> LinkedIn for professional connections</li>
<li><strong>Local services:</strong> Facebook for community engagement  </li>
<li><strong>Visual products:</strong> Instagram for brand building</li>
</ul>
<p>For businesses looking to scale content production, AI tools for small business can reduce content creation time by 60% or more. If automation is the next step after basic channels, see business process automation examples and the AI automation playbook for small business owners.</p>
<h2>Digital Marketing Strategy Framework for NZ Businesses</h2>
<p><strong>Step 1: Define Your Digital Territory</strong></p>
<ul>
<li>Identify your primary service areas (within driving distance?)</li>
<li>Research local search volume for your key services</li>
<li>Map competitor digital presence in your area</li>
</ul>
<p><strong>Step 2: Calculate Your Customer Acquisition Goals</strong><br>How many new customers do you need monthly to hit your revenue targets? Work backwards:</p>
<ul>
<li>Monthly revenue goal ÷ Average customer value = Customers needed</li>
<li>Customers needed ÷ Conversion rate = Website visitors required</li>
<li>Website visitors ÷ Content pieces = Content strategy scope</li>
</ul>
<p><strong>Step 3: Build Your Digital Asset Stack</strong></p>
<ul>
<li><strong>Foundation:</strong> Professional website with local SEO</li>
<li><strong>Authority:</strong> Regular, valuable content addressing customer needs</li>
<li><strong>Connection:</strong> Email list of prospects and past customers</li>
<li><strong>Amplification:</strong> Social media presence on 1-2 relevant platforms</li>
</ul>
<p>For a deeper dive into streamlining your operations, see our business process automation small business guide.</p>
<h2>Case Study: Wellington Plumbing Company</h2>
<p><strong>Challenge:</strong> Competing against established plumbers with decades of local reputation.</p>
<p><strong>Strategy:</strong> </p>
<ul>
<li>Created &quot;Emergency Plumbing Wellington&quot; content targeting urgent searches</li>
<li>Built Google My Business presence with customer photos and reviews</li>
<li>Developed email newsletter with seasonal maintenance tips</li>
</ul>
<p><strong>Results (6 months):</strong></p>
<ul>
<li>340% increase in website traffic</li>
<li>45 new customers from digital channels</li>
<li>$23,000 additional revenue with $3,200 marketing spend</li>
</ul>
<p><strong>ROI:</strong> 7:1 return on digital marketing investment</p>
<h2>Free Digital Marketing ROI Calculator for NZ Businesses</h2>
<p><strong>Customer Lifetime Value Formula:</strong><br>(Average purchase value × Purchase frequency × Customer lifespan) - Customer acquisition cost</p>
<p><strong>Example:</strong></p>
<ul>
<li>Average job value: $450</li>
<li>Customers per year: 3 visits</li>
<li>Customer lifespan: 4 years</li>
<li>Customer Lifetime Value: $5,400</li>
</ul>
<p>If digital marketing costs you $200 to acquire one customer, your ROI is 27:1.</p>
<h2>Getting Started: Your 30-Day Digital Marketing Sprint</h2>
<p><strong>Week 1: Foundation</strong></p>
<ul>
<li>Set up Google My Business completely</li>
<li>Audit your current website for local search optimization</li>
<li>List your business in top 5 NZ directories</li>
</ul>
<p><strong>Week 2: Content Creation</strong></p>
<ul>
<li>Write 3 blog posts answering your most common customer questions</li>
<li>Create a simple lead magnet (guide, checklist, calculator)</li>
<li>Set up basic email capture system</li>
</ul>
<p><strong>Week 3: Social Presence</strong></p>
<ul>
<li>Choose your primary social platform</li>
<li>Create 2 weeks of valuable content  </li>
<li>Engage with local business communities online</li>
</ul>
<p>For a structured approach to scaling these efforts, see our AI automation for small business owners 2025 implementation playbook for automating repetitive tasks and freeing up your time.</p>
<p><strong>Week 4: Measurement &amp; Optimization</strong></p>
<ul>
<li>Install Google Analytics and track key metrics</li>
<li>Monitor which content drives actual inquiries</li>
<li>Adjust strategy based on real performance data</li>
</ul>
<h2>Frequently Asked Questions</h2>
<p><strong>What digital marketing channels work best for NZ small businesses?</strong><br>For most NZ small businesses, Google My Business (free) and local SEO deliver the highest ROI first. After that, email marketing and targeted Google Ads outperform social media for lead generation. Social media works best for brand awareness and community building, not direct sales.</p>
<p><strong>How much should a NZ small business spend on digital marketing?</strong><br>A common benchmark is 5–10% of revenue. For a business earning NZD $500K/year, that&#39;s $25K–$50K annually. Start with free channels (GMB, SEO) before paying for ads. NZD $500–$1,500/month in Google Ads is a reasonable starting budget for most local service businesses.</p>
<p><strong>Is SEO or social media better for NZ businesses?</strong><br>SEO typically wins for long-term ROI in NZ because search intent is higher (people actively looking for your service). Social media is better for building awareness and trust. Most successful NZ small businesses invest primarily in SEO and use social media to support it.</p>
<p><strong>How long does digital marketing take to show results?</strong><br>Google Ads: results within 1–2 weeks. SEO: meaningful results in 3–6 months. Email marketing: immediate for existing list, 3–6 months to build from scratch. The businesses getting the best ROI invest consistently for 12+ months.</p>
<p><strong>What is digital marketing for small business NZ?</strong><br>It is the use of online channels like SEO, social media, email, and local advertising to reach New Zealand customers cost-effectively and grow your business.</p>
<p><strong>Why does digital marketing matter for NZ small businesses?</strong><br>Most Kiwi customers search online before buying. Effective digital marketing helps small businesses compete with larger brands, even on limited budgets.</p>
<h2>NZ-Specific Digital Marketing Channels</h2>
<p>Most digital marketing guides are written for US or UK audiences. Here&#39;s what&#39;s different for NZ businesses:</p>
<h3>Platforms Worth Your Attention in NZ</h3>
<ul>
<li><strong>TradeMe</strong> — For product businesses or B2C services, TradeMe&#39;s audience is highly NZ-specific and purchasing-intent is high</li>
<li><strong>Neighbourly</strong> — Effective for hyperlocal service businesses (trades, cleaning, childcare) within specific suburbs</li>
<li><strong>Stuff.co.nz</strong> — Display advertising reaches a large NZ audience; best for brand campaigns rather than direct response</li>
<li><strong>LinkedIn NZ</strong> — For B2B services targeting NZ businesses; smaller audience than US but higher relevance</li>
</ul>
<h3>NZ Digital Marketing Channel Comparison</h3>
<table>
<thead>
<tr>
<th>Channel</th>
<th>Avg NZ CPC</th>
<th>Monthly Audience</th>
<th>Best For</th>
</tr>
</thead>
<tbody><tr>
<td>Google Search Ads</td>
<td>NZD $2–8</td>
<td>4M+ searches/day</td>
<td>High-intent local leads</td>
</tr>
<tr>
<td>Facebook/Instagram</td>
<td>NZD $0.50–2</td>
<td>3M+ NZ users</td>
<td>Awareness, retargeting</td>
</tr>
<tr>
<td>LinkedIn NZ</td>
<td>NZD $6–15</td>
<td>1M+ professionals</td>
<td>B2B lead generation</td>
</tr>
<tr>
<td>TradeMe Ads</td>
<td>NZD $0.20–1</td>
<td>3.5M monthly</td>
<td>Product/local services</td>
</tr>
</tbody></table>
<h2>The Reality Check: What Digital Marketing Won&#39;t Do</h2>
<p>Digital marketing isn&#39;t magic. It won&#39;t fix fundamental business problems:</p>
<ul>
<li>Poor customer service</li>
<li>Overpriced offerings</li>
<li>Unreliable service delivery</li>
</ul>
<p>But if you deliver genuine value, digital marketing becomes a reliable system for connecting with customers who need what you offer.</p>
<h2>Your Next Action</h2>
<p>Stop consuming more digital marketing theory. Start with one tactical step today:</p>
<p>Set up or optimize your Google My Business listing. It takes 30 minutes and immediately improves your local search visibility.</p>
<p>Because the best digital marketing strategy is the one you actually implement.</p>
<p>If marketing work is still stuck in spreadsheets, manual follow-ups, and one-off campaigns, the bottleneck is often process, not more channels. Fix the process first, then add channels.</p>
<hr>
<h2>Related Articles</h2>
<ul>
<li>Best AI Tools for Small Business (2025 Edition)</li>
<li>Business Process Automation Examples: Real ROI Data</li>
<li>AI Automation for Small Business Owners: Implementation Playbook</li>
<li>AI Workflow Automation: Where to Start</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Hedging Against the AI Transition</title>
      <link>https://www.learnedlate.com/writing/hedging-against-the-ai-transition</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/hedging-against-the-ai-transition</guid>
      <pubDate>Wed, 09 Jul 2025 00:00:00 GMT</pubDate>
      <description>Why AI's speed of change creates a different economic challenge than the Industrial Revolution</description>
      <content:encoded><![CDATA[<p>If you&#39;re on Twitter, chances are you had something like this in your timeline.</p>
<p><img src="https://www.learnedlate.com/images/writing/hedging-against-the-ai-transition/1.webp" alt=""></p>
<p>(source <a href="https://x.com/levelsio/status/1918699155347710329">https://x.com/levelsio/status/1918699155347710329</a>)</p>
<p>On top of that, you see news that companies are trimming down, and overall hiring in the service industry seems pretty slow.</p>
<p>I don&#39;t know what to make of this.</p>
<p>On the one hand, I see how AI is automating many things, and my own productivity using these tools over the last two years has increased significantly.</p>
<p>On the other hand, I am reminded of the Industrial Revolution and how everything must have seemed pretty grim.</p>
<p>We automated everything back then.</p>
<p>Some would have transitioned to operating the machines, but the business case was that one machine was MORE productive than an individual, so they couldn&#39;t all have been machine operators.</p>
<p>That transition phase was the trickiest. The change required in individuals as their job got replaced by a machine, and they had to learn something else.</p>
<p>I think we are heading into another one of these transition phases.</p>
<p>I am generally optimistic and think we&#39;ll figure it out, but that doesn&#39;t mean there won&#39;t be any short-term disruptions.</p>
<h2>The Acceleration Reality</h2>
<p>What is the difference between the AI Revolution and the Industrial Revolution?</p>
<p>The Industrial Revolution was primarily about moving atoms and building machines that were slow to distribute geographically. Knowledge was also much slower to spread back then.</p>
<p>The AI Revolution moves bits - every idea, every product iteration is instantly distributed around the globe for the next person to iterate on.</p>
<p>Software improvements, workflow automations, and ideas move around the globe in minutes.</p>
<p>It&#39;s like everyone is compounding on everyone else&#39;s work at the same time—insane competition breeding in a global incubator.</p>
<p><img src="https://www.learnedlate.com/images/writing/hedging-against-the-ai-transition/2.webp" alt=""></p>
<p>(PS: I have had to get a <a href="https://x.com/learnedlate">new twitter account</a> - my old one got suspended and I can&#39;t seem to get it back...)</p>
<p>Parts of this will innovate more slowly than simple SaaS tools, but even B2B enterprise software will get more competition and therefore have to increase the speed at which it innovates.</p>
<p>This is not just limited to software development; every industry that uses software will be impacted to some degree.</p>
<p>I just can&#39;t believe the video and creative space won&#39;t be bothered by stuff like Veo 3.</p>
<p><img src="https://www.learnedlate.com/images/writing/hedging-against-the-ai-transition/3.webp" alt="Pasted image 20250708140651.png"></p>
<p>(source <a href="https://x.com/venturetwins/status/1942371183644794987">https://x.com/venturetwins/status/1942371183644794987</a>)</p>
<p>Google, with all its data, so far was lagging behind, but is now rapidly picking up pace.</p>
<p><img src="https://www.learnedlate.com/images/writing/hedging-against-the-ai-transition/4.webp" alt="Pasted image 20250708110818.png"></p>
<p>Again, I&#39;m tempted to ask the same questions. Are we all doomed, and our work will be automated away?</p>
<p>Are there places that are safer than others?</p>
<h2>What AI Can&#39;t Do (yet)</h2>
<p><img src="https://www.learnedlate.com/images/writing/hedging-against-the-ai-transition/5.webp" alt="Pasted image 20250708103126.png"></p>
<p>There&#39;s truth to this. Especially if you look at software. If everyone can build software as good as anyone else, then it&#39;s just about your specific user experience, your network and your distribution within it.</p>
<p>Although SAP is slow to innovate compared to the thousands of other ERP startups, it has a massive network, unlimited integrations, and a foot in the door with almost every large corporation on the planet.</p>
<p>Software alone can no longer be the moat; it needs to be more than that.</p>
<p>I&#39;ve been writing code (on and off) for about twenty years. A couple of years ago, I would have said I&#39;m really good at building prototypes. I&#39;m pragmatic, have a <a href="https://www.learnedlate.com/writing/the-good-enough-mindset">good enough mindset</a> and know enough to build something into a workable piece of software quickly.</p>
<p>Today, everyone can do that, though. Maybe not just as good as I can, but the barrier has almost been removed.</p>
<p>If it&#39;s all about distribution, then I might be better off focusing on writing, growing my Substack presence, or expanding my network.</p>
<p>However, even distribution is being automated these days with AI-driven cold outreach, AI-generated Twitter posts, and <a href="https://www.learnedlate.com/writing/automate-marketing-automate-anything">AI-generated written SEO content</a>.</p>
<p>This is also improving at the speed of light. I&#39;m unsure how long distribution and reach will even stay a real advantage.</p>
<p>It then would come down to something AI can&#39;t do. Being authentic, being human, being oneself, being creative.</p>
<p>Being yourself on the internet or in real life isn&#39;t easy, but people with a big audience on Twitter are often so entertaining because it is so authentic and real. They simply share their unfiltered thoughts.</p>
<p>Could creativity be the thing that gives us humans an edge? Right now, I think we are still much better at this. Creativity comes from solving or interpreting struggles that appear in one&#39;s life. Someone figured out how to make beer because they let the grain sit for too long while it got wet.</p>
<p>Could being oneself on the internet be the solution to distribution and standing out in the age of AI?</p>
<h2>The Oversupply Problem</h2>
<p>Focusing on what AI can&#39;t do might be missing the bigger picture. The real challenge isn&#39;t finding our unique human advantage - it&#39;s dealing with the economic reality of oversupply in everything.</p>
<p>Oversupply of software automation, oversupply of authentic content on the internet, and oversupply of hot girls on Instagram.</p>
<p><img src="https://www.learnedlate.com/images/writing/hedging-against-the-ai-transition/6.webp" alt=""></p>
<p>(<a href="https://x.com/venturetwins/status/1940047844725186882">https://x.com/venturetwins/status/1940047844725186882</a>)</p>
<p>Oversupply does one thing. It brings the price down. A potential future could therefore be one where the prices of most services drop as businesses compete for market share.</p>
<p>If there is not enough demand, then this is a race to the bottom. With the industrial revolution, we were able to create so much new demand to continue to improve our lives and circumstances, and to some degree, I can see this happening here, too.</p>
<p>Back then, we couldn&#39;t have imagined all that demand. Who knew we&#39;d need iPhones, laptops and electric cars?</p>
<p>Similarly, who knows what we&#39;ll need in twenty years?</p>
<p>One thing is certain to me: there is a ton of uncertainty. Nobody knows how this is going to unfold, and it&#39;s just going to accelerate.</p>
<p>Let&#39;s look at two possible options:</p>
<ol>
<li><p>We create enough demand for all the supply for the now supercharged services sector, new jobs will emerge, so that people still have lots to do, and while the tedious bits get automated, life goes on just like that.</p>
</li>
<li><p>We don&#39;t, prices drop, while we continue to automate everything, and people need to find other fun stuff to do, other things that give them meaning.</p>
</li>
</ol>
<p>Both sound exciting, and in the long run, I am generally optimistic; it&#39;s the short to mid-term I am uncertain about.</p>
<p>Will we have mass layoffs while new demand is created?<br>Will the government create UBI with a social credit system to keep us all &quot;happy&quot;?</p>
<p><img src="https://www.learnedlate.com/images/writing/hedging-against-the-ai-transition/7.webp" alt=""></p>
<p>(<a href="https://x.com/2ndBlessed/status/1941776336760045834">https://x.com/2ndBlessed/status/1941776336760045834</a>)</p>
<p>How to then position yourself?</p>
<p>Stay ahead and on top of the latest? Be authentic and creative?</p>
<h2>Navigating the Transition</h2>
<p>Right now, I&#39;m doing my best to stay on top, grow my audience, learn as much as I can about this new tech while staying flexible and ready to pivot.</p>
<p>Having some runway helps with that.</p>
<p>I&#39;m not in a bad spot, and my productivity has absolutely skyrocketed, but if my business attempts fail, then I&#39;m likely back to finding a job, which then could mean tough competition (unless demand increases).</p>
<p>Every engineer will have the tools to be 10x right now. So there is certainly a lot of supply.</p>
<p>I can see and feel this when talking to friends right now. The job market here doesn&#39;t seem great.</p>
<p>Adaptability might even mean more extreme things. Maybe learn something new, physical labour services are certainly much safer than jobs purely working on computers.</p>
<p>Accounting is far easier to automate than plumbing.</p>
<p>Entrepreneurship could be a way out? Perhaps you have extensive knowledge of automation or a particular business process. Building software has never been easier, so maybe now is the time to solve some of these existing inefficiencies in the system.</p>
<p>P.S. If your team needs help modernizing legacy systems or integrating automation and AI workflows, I offer fractional CTO-style support—short sprints, clear outcomes. <a href="https://www.learnedlate.com/">Learn more → ↗</a></p>
<p><img src="https://www.learnedlate.com/images/writing/hedging-against-the-ai-transition/8.webp" alt="Pasted image 20250708120130.png"></p>
<p>Last resort? Get away from it all and buy a piece of land and try to be as self-sufficient as possible.</p>
<p>Growing your own food, lowering the cost of living, and spending more time with the family also means you need less money.</p>
<p>There will likely be instability, so finding something to anchor to that gives meaning could be smart.</p>
<p>For now, I&#39;m hedging my bets - staying current with AI, building my network, and keeping an eye on opportunities in both digital and physical spaces. The transition will be messy, but maintaining flexibility seems like the best defence against an uncertain future.</p>
<p>In the long run, I&#39;m optimistic and sure we&#39;ll figure things out.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Beyond the Big Wins - Unpacking the Cumulative Power of Your Efforts</title>
      <link>https://www.learnedlate.com/writing/beyond-the-big-wins-unpacking-the</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/beyond-the-big-wins-unpacking-the</guid>
      <pubDate>Tue, 01 Jul 2025 00:00:00 GMT</pubDate>
      <description>How small pushes, perceived failures, and continuous learning are the true drivers of long-term success.</description>
      <content:encoded><![CDATA[<p>Jim Collins, in &quot;Good to Great,&quot; describes the flywheel effect as the cumulative effect of continuous effort put towards a goal.</p>
<p>The more you keep pushing, the faster that flywheel will eventually be turning.</p>
<p>Initially, it&#39;s quite slow, and you may wonder if it even makes a difference to push it. But then, over time, it will build momentum.</p>
<p>What I found most interesting about this analogy is the idea that when looking back, you can&#39;t identify a single push that was responsible for it to be spinning faster.</p>
<p>Some actions or activities in our lives might have more impact than others, but these more impactful activities often &quot;stand on the shoulders of giants&quot;.</p>
<p><img src="https://www.learnedlate.com/images/writing/beyond-the-big-wins-unpacking-the/1.webp" alt="Pasted image 20250701135407.png"></p>
<h2>Learning From Mistakes</h2>
<p>As Newton described, his groundbreaking work was not entirely groundbreaking because of him alone, but rather because he was building upon all that others had already discovered.</p>
<p>It&#39;s the same with our activities throughout our lives.</p>
<p>A setback, or an activity we might think of as pretty useless, might have shifted our perspective, preparing us for a truly impactful activity.</p>
<p>Maybe a business that we have started and failed with has taught us something useful, so that during our next attempt at starting something, we can overcome that same hurdle.</p>
<p>Each and every push on our life flywheel will not have the exact same impact, but the stronger ones will have been built up by a lot of the weaker ones.</p>
<p>A failure, in a way, is not slowing the flywheel, but it enables the next push to be even stronger.</p>
<p>In my piece about my <a href="https://www.learnedlate.com/writing/18-months-6-pivots-35-mrr-what-pmf">struggles with building a personal finance app</a>, I described how doing something that might seem pointless or wasted also contributes to learning.</p>
<p>That learning, just like the pushing of the flywheel, accumulates.</p>
<p>And more often than not, learning isn&#39;t what we remember it to be from school.</p>
<p>We don&#39;t just learn by reading books, attending classes or courses. We mostly learn by doing.</p>
<p>I&#39;m trying to grow the presence of my site by improving SEO, which I do through a combination of reading and experimentation.</p>
<p>My personal finance app might never take off, but what I&#39;ll take away is how to approach building SEO, marketing, or selling. Or even more suitable, how NOT to do any of that, because last time it didn&#39;t work.</p>
<p>Ever since I first read Good to Great, I&#39;ve found the flywheel analogy intriguing.</p>
<p>It&#39;s almost like, as long as you work towards a goal, you&#39;ll get something out of it. All you need is consistency. Don&#39;t stop and keep doing that thing.</p>
<p>That&#39;s easier said than done, though. What goal are we even pushing for?</p>
<h2>What Flywheel Are You Pushing?</h2>
<p><img src="https://www.learnedlate.com/images/writing/beyond-the-big-wins-unpacking-the/2.webp" alt="Pasted image 20250701141334.png"></p>
<p>I don&#39;t think one should just do anything, but ever since writing <a href="https://www.learnedlate.com/writing/how-to-get-what-you-want-in-life">this piece</a>, I&#39;ve also been thinking and reading a lot about what motivates and drives people.</p>
<p>For me, this is somewhat clear. I assume my love for surfing triggered it. I got obsessed with living in a different country (with waves).</p>
<p>That goal then morphed into being able to live wherever I want.</p>
<p>If you think through achieving such a goal, you see that you&#39;d either need to be extremely flexible and find work wherever you want, financial independence, or a set of your own income streams.</p>
<p>This is described as a pyramid of goals by Angela Duckworth in her book Grit.</p>
<p><img src="https://www.learnedlate.com/images/writing/beyond-the-big-wins-unpacking-the/3.webp" alt=""></p>
<p>(image from Angela Duckworth: <a href="https://vimeo.com/250654148">Hierarchy of Goals</a>)</p>
<p>Grit is a characteristic that drives some people to be extremely persistent in pursuing a goal over an extended period.</p>
<p>The ultimate concern she describes here could be my desire to live wherever I want.</p>
<p>That high-level goal has multiple hierarchical levels of lower-level goals, each with sub-goals that feed into it.</p>
<p>So for me, that might look like this:</p>
<p>Live wherever I want<br>1. Have a large enough runway to move and weather a storm.<br>2. Have a generalist skillset that enables me to find a job in case of emergency.<br>3. Have my own income stream via a business.</p>
<p>One of these lower-level goals can have more sub-level goals that ultimately break down into tasks to work on actively.</p>
<p>Sticking to my example:</p>
<p>Have my own income stream<br>1. Build up Substack so I might make money off of that someday.<br>2. Build up Expense Sorted so it might turn into something.<br>3. Find consulting clients that I can work for.</p>
<p>All of these subtasks align with my higher-level goal. The good thing about being aligned with those higher-level goals is that it motivates.</p>
<p>Not consciously in day-to-day life, but rather as a background process in your brain that compares your current activities with the overall goal that you have.</p>
<p>One might stray from that path for a while, but unless your goal changes, you will eventually recognise that you have gotten off the path and correct course.</p>
<p><img src="https://www.learnedlate.com/images/writing/beyond-the-big-wins-unpacking-the/4.webp" alt="Pasted image 20250701063613.png"></p>
<h2>The Failure Feedback Loop</h2>
<p>Some of these tasks will fail. Perhaps Expense Sorted won&#39;t find product-market fit and will never gain traction.</p>
<p>Looking at my overarching goal, I might have wasted some time chasing down the wrong path, but I have learned some valuable skills.</p>
<p>Perhaps I was just lucky with my first startup. The second time, maybe I didn&#39;t communicate or sell it effectively, or perhaps my timing was off. Who knows.</p>
<p>Whatever it is, these attempts and the learning that comes with them all contribute to pushing our flywheel.</p>
<p>If Expense Sorted fails, I&#39;ll do something else under that branch of &quot;Have my own income stream&quot;, but this time I&#39;ll be equipped with more learning.</p>
<p>Even though a sub-goal failed, work towards the highest goal continues, and new sub-goals emerge all the time.</p>
<p>Next time, pushing the flywheel, I&#39;ll be standing on all the lessons learned from the activities I have failed at.</p>
<h2>How do we know what the goal is?</h2>
<p>This has been extremely subtle for me, and my understanding of it has only developed over the last few years.</p>
<p>It was, however, always somewhere deep down.</p>
<p>Some might like <a href="https://jamesclear.com/goal-setting">goal setting</a> by planning out what and where they want to be in the next five to ten years, and that can certainly help. The active process of thinking about this is often enough to get started.</p>
<p>The honest answer, though, is that I don&#39;t know.</p>
<p>It may require a great deal of introspection, a lot of self-reflection, and careful consideration of your life and what is truly important to you.</p>
<p>Goals might not need to be as strict as Angela Duckworth and the gritty people describe them. If you swap your higher-level goal after a couple of years, I guess that&#39;s totally fine as long as you keep pushing your flywheel of learning new skills.</p>
<p>Most skills you learn will be somewhat transferable.</p>
<p>Learning how to sell or negotiate is very generic, as well as knowing how to articulate things.</p>
<p>In many ways, simply being aware of the relationship between a higher goal and your day-to-day activities might get people thinking.</p>
]]></content:encoded>
    </item>
    <item>
      <title>From a 20ft Container to Six Bags</title>
      <link>https://www.learnedlate.com/writing/from-a-20ft-container-to-six-bags</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/from-a-20ft-container-to-six-bags</guid>
      <pubDate>Tue, 24 Jun 2025 00:00:00 GMT</pubDate>
      <description>Our family's accidental journey into minimalism and the freedom we found in owning less.</description>
      <content:encoded><![CDATA[<p>We lived in a 120+ sqm house in Germany before we left for Singapore. Prior to the move, we visited Singapore and checked out a few places.</p>
<p>A 120+ sqm house was far too expensive in Singapore. We&#39;d have to settle for a much smaller place.</p>
<p>So we started selling a few of our bigger items, such as our king-size bed, our big couch and our dining table. On top, we did a lot of decluttering of stuff we had accumulated over the years.</p>
<p><img src="https://www.learnedlate.com/images/writing/from-a-20ft-container-to-six-bags/1.webp" alt="Pasted image 20250616060536.png"></p>
<p>Despite all that, we still loaded up a 20ft container to the brim.</p>
<p><img src="https://www.learnedlate.com/images/writing/from-a-20ft-container-to-six-bags/2.webp" alt="Pasted image 20250616060209.png"></p>
<p>In Singapore, we noticed we weren&#39;t using most of the stuff we had brought, so we started selling things.</p>
<p>Even though we thought we had gotten rid of a lot of stuff when packing for our move to Sydney, we still filled more than half the 20-foot container.</p>
<p><img src="https://www.learnedlate.com/images/writing/from-a-20ft-container-to-six-bags/3.webp" alt="Pasted image 20250616061050.png"></p>
<p>Our journey to declutter continued until our next move. This time with just six bags!</p>
<p>How did we get from a container to a few bags? We accidentally became minimalists.</p>
<h2>The Hidden Reality of Stuff</h2>
<p>Why did we even accumulate so much stuff in the first place?</p>
<p>There is always a constant stream of stuff coming in.</p>
<p>Going to the shops, ordering from Amazon, whatever it might be, it&#39;s gotten so easy to buy stuff that we do it almost every day.</p>
<p>Marketing, peer pressure, or simple boredom might be the reasons, and often, it happens unconsciously. We buy stuff without even noticing.</p>
<p>Not that we don&#39;t notice that we buy, but we don&#39;t notice the accumulation. It gets stored away somewhere in our house.</p>
<p>While buying stuff is easy, almost automatic, getting rid of it is not.</p>
<p>It&#39;s hard to separate from something that we already own. We&#39;ve spent money on it, so we can&#39;t just give it away. What if we need it in the future?</p>
<p>Just like that, we&#39;ll accumulate vast amounts of stuff over the years.</p>
<p><img src="https://www.learnedlate.com/images/writing/from-a-20ft-container-to-six-bags/4.webp" alt="Pasted image 20250616060811.png"></p>
<p>For us, it was the move overseas that triggered taking inventory.</p>
<p>The size of our shipping container was limited, so we had to decide what to keep.</p>
<p>Most of the things we uncovered when prepping the move were things we had forgotten about, tucked away in boxes in the basement.</p>
<p>We hadn&#39;t used them for years and didn&#39;t even need them.</p>
<p>The accumulation of stuff happens unconsciously, and we hardly ever make a conscious effort to get rid of it, even if we don&#39;t need it.</p>
<h2>What do we need?</h2>
<p>You will have heard of minimalism, and like me, you might have an image in your mind of an empty room with a single chair or something similar.</p>
<p><img src="https://www.learnedlate.com/images/writing/from-a-20ft-container-to-six-bags/5.webp" alt="Pasted image 20250624090216.png"></p>
<p>I don&#39;t want to live like that, but like everything in life, there is a spectrum between that end and the end where you have a whole basement full of boxes you haven&#39;t touched in years.</p>
<p>We used a simple rule: if you haven&#39;t opened a box or used an item for more than half a year, chances are you won&#39;t use it again.</p>
<p>If space is not a problem, you don&#39;t need to bother decluttering; there&#39;s no point in throwing things away.</p>
<p>But if space is a problem and you move around or, worse of all, have forgotten about something and bought it again, then you have a problem.</p>
<p>You may buy stuff for the dopamine rush of the purchase, the feeling of newness itself.</p>
<p>From my experience, this is a false sensation of happiness that isn&#39;t sustainable.</p>
<p>Observe yourself after a purchase. The moment of buying feels great, unpacking and trying it out does, too, but more often than not, that&#39;s it. Your life often doesn&#39;t get any better by buying a new gadget.</p>
<p>What can you do about it?</p>
<h2>The power of friction</h2>
<p>If you&#39;ve built a webshop or sold pretty much anything, you know that a big part of successful sales is reducing friction. You want that purchase decision to be as easy as possible.</p>
<p><img src="https://www.learnedlate.com/images/writing/from-a-20ft-container-to-six-bags/6.webp" alt="Pasted image 20250624091516.png"></p>
<p>Amazon, etc., have perfected the checkout. It&#39;s a one-click purchase, where you don&#39;t even review the shopping cart; they just charge your credit card and ship.</p>
<p><img src="https://www.learnedlate.com/images/writing/from-a-20ft-container-to-six-bags/7.webp" alt="Pasted image 20250624091801.png"></p>
<p>What if you don&#39;t like it? No worries, free 30-day return policy!</p>
<p>They want you to buy it, store it at home, and forget about it.</p>
<p>Reintroducing friction, however, can help if you want to be more conscious about buying things.</p>
<p>You could buy stuff at a physical store, requiring you to drive there.</p>
<p>When we moved to Singapore, we stumbled into a different kind of friction—second-hand purchases.</p>
<p>We knew we wouldn&#39;t stay in Singapore forever, and we had just sold so much that we weren&#39;t keen to buy new stuff.</p>
<p>The second-hand market was great, so we bought much of what we needed that way.</p>
<p>Buying stuff from random people, picking it up at their place, and not having free shipping isn&#39;t easy. It&#39;s pure friction, and you&#39;ll certainly think twice about buying something.</p>
<p>Buying something second-hand also creates less emotional attachment; if you could buy it, you could sell it too.</p>
<p>Artificial friction could be introduced by simple rules, such as waiting a day before buying something.</p>
<p>I&#39;m not so much interested in buying less simply to own less. It&#39;s more about being in control instead of running on autopilot.</p>
<p>Peer pressure seems to lead many people astray here. Often, a purchase can be motivated by other people owning something you don&#39;t.</p>
<h2>Authenticity Inspires</h2>
<p><img src="https://www.learnedlate.com/images/writing/from-a-20ft-container-to-six-bags/8.webp" alt="Pasted image 20250624092707.png"></p>
<p>IYKYK—we drink out of peanut butter jars, and it&#39;s not only practical (they are bigger) but also free.</p>
<p>My wife is usually a little embarrassed when we have guests over to serve them water out of peanut butter jars, but when she did so recently, the guests liked them and started collecting them too.</p>
<p>This is a nice example of how you may not want to reveal your true self, but doing so inspires others.</p>
<p>Peer pressure can sometimes drive people to do stuff they wouldn&#39;t otherwise do.</p>
<p>Our couch consists of two mattresses and a bunch of pillows. It&#39;s uncomfortable for us old folks to sit down and get up again, but the kids love it. If we cared more about what other people think, we&#39;d probably buy a proper couch, but focusing more on what we need has taught us this.</p>
<p>Admittedly, having people over who don&#39;t know you can still be a little weird with our couch setup.</p>
<h2>What Matters: Time Over Things</h2>
<p>Focusing more on important stuff sounds like such a vague thing to say. What does that actually mean?</p>
<p>What is important to you is hard for anyone other than you to figure out.</p>
<p>To me, it&#39;s knowing that my kids ultimately don&#39;t care that much about a new toy. My son would always prefer to just go for a little stroll around the neighbourhood, checking out cars and diggers instead of buying him something new (he&#39;d take a new toy, of course, but then wants me to play with that toy together with him). So why not just give him time straight away?</p>
<p>Another weird paradox is our current living situation. We have a super nice townhouse that is 2 minutes&#39; walk from the beach, and we like it and enjoy living here. But looking back at our time living in a bus travelling up and down the coast, we felt happier. The small space and simple life led to fewer commitments and more time outside.</p>
<p><img src="https://www.learnedlate.com/images/writing/from-a-20ft-container-to-six-bags/9.webp" alt="Pasted image 20250624132216.png"></p>
<p>A simpler life means more time for relationships and hobbies and less stress. <a href="https://www.learnedlate.com/writing/the-fishermans-dilemma-why-enough">It is what the fisherman has known all along</a>.</p>
<p><a href="https://www.learnedlate.com/writing/the-fishermans-dilemma-why-enough">The Fisherman&#39;s Dilemma: Why &#39;Enough&#39; Is the Hardest Financial Number to Find</a></p>
<p>Like I keep saying, everyone is different, but upon introspection, we learn that more things often aren&#39;t the solution we hoped they would be.</p>
<h2>Financial Minimalism</h2>
<p>This same concept applies to your finances.</p>
<p>Most startups work like this: You start with an idea and a limited amount of cash while making no money. The goal is to make money before the cash reserve runs out. You could go all in and spend it all quickly, betting on making money in a certain way, or you can take a more considerate approach and keep the &quot;burn rate&quot; under control.</p>
<p>This means you are careful with hiring or stay flexible enough to downsize the team if needed.</p>
<p>In this fight for survival, startups are often minimalistic by default (working from a garage).</p>
<p>Applied to personal finance, this thought experiment can give a great feeling of safety. I might be renting a townhouse by the beach right now, but I could downsize anytime, move back into a bus, and live a cheap life.</p>
<p>That&#39;s an extreme example, but minimalism from a financial lens means that one shouldn&#39;t get too comfy and used to one&#39;s expenses and general lifestyle bloat.</p>
<p>Financial minimalism here isn&#39;t about deprivation, just as I don&#39;t like to live like a hermit in other areas of my life, but I want options, I want to be flexible (<a href="https://www.learnedlate.com/writing/fuck-you-money-doesnt-mean-you-need">perhaps to say f-you</a>).</p>
<p><a href="https://www.learnedlate.com/writing/fuck-you-money-doesnt-mean-you-need">Fuck you money doesn’t mean you need to be rich</a></p>
<p>Eating out every day because you don&#39;t know how to cook your own food could be a more basic example. Cooking at home is generally healthier and cheaper than ordering food every day, but if you get too used to ordering, you&#39;ll have to wean yourself off if things get rough.</p>
<h2>An Ongoing Practice</h2>
<p>Minimalism to me isn&#39;t an empty house and only owning one pair of shoes.</p>
<p>It&#39;s being aware that stuff you might not need silently creeps into your household while you spend your hard-earned money. A little friction can help.</p>
<p>It&#39;s focusing on what we need. This can get quite philosophical, but think about which of your habits have consistently delivered a better feeling than buying stuff. Maybe exercise? A better diet? Good relationships? Time for yourself?</p>
<p>It&#39;s the courage to live authentically and free of peer pressure. There is genuine value in being yourself. If you pull it off, more people than you expect will be inspired rather than put off.</p>
<p>It&#39;s the ability to downscale if you need to because you can adapt and still live a good life without all that stuff.</p>
<p>You don&#39;t need to move across the world to start. You just need the courage to ask yourself what truly matters, and the honesty to act on the answer, taking one step at a time.</p>
]]></content:encoded>
    </item>
    <item>
      <title>18 Months, 6 Pivots, $35 MRR: What PMF Actually Looks Like</title>
      <link>https://www.learnedlate.com/writing/18-months-6-pivots-35-mrr-what-pmf</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/18-months-6-pivots-35-mrr-what-pmf</guid>
      <pubDate>Thu, 19 Jun 2025 00:00:00 GMT</pubDate>
      <description>I spent 18 months and six pivots building a personal finance app and reached $35 MRR. Here's what I learned about distribution and the real problem.</description>
      <content:encoded><![CDATA[<p>How I got to $35 MRR in 18 months of building a personal finance app.</p>
<p>Thirty-five dollars monthly recurring revenue—not $35K, not $35M. Just $35.</p>
<p><img src="https://www.learnedlate.com/images/writing/18-months-6-pivots-35-mrr-what-pmf/1.webp" alt="Billing overview dashboard showing MRR of NZ$35.97 over the last 7 days"></p>
<p>Here&#39;s what 18 months of grinding actually looks like, and the expensive lessons I learned along the way.</p>
<p>This is a sort of antidote to the usual how I got to $1M MRR success stories, which might be inspiring but are very much out of reach and hide the realities of what it means to grind.</p>
<p><img src="https://www.learnedlate.com/images/writing/18-months-6-pivots-35-mrr-what-pmf/2.webp" alt="Tweet “How to retire in your 20s” listing five steps from copying a SaaS to selling for $250k-350k"></p>
<p>I think a lot of founders who have been through this can relate.</p>
<p>People get the same wrong impression from Instagram and Twitter these days. The impression that everyone else is killing it. If you ask me, that&#39;s most likely not the case. Everyone struggles.</p>
<p>I want to reflect on my personal finance journey and how it has led me to sink a ton of time into building an app, trying to find if someone else might also be interested in it (aka finding product market fit).</p>
<p>Two years ago, I turned my personal Google Sheet budget tracker into a web app. After working at Forgd for a year, I returned to find 300+ people had signed up.</p>
<p><img src="https://www.learnedlate.com/images/writing/18-months-6-pivots-35-mrr-what-pmf/3.webp" alt="WhatsApp chat: “I have 300+ registered users” answered with “Mate, thats a business”"></p>
<p>Pretty excited, I thought I could get this thing going.</p>
<p>It wasn&#39;t quite as easy, though.</p>
<h2>Building Better Features Wasn&#39;t Enough</h2>
<p>To simplify things, I thought I&#39;d build a simple Google Sheets extension that works from my template and automatically categorises bank transactions based on a user&#39;s past transactions.</p>
<p>Full of excitement, I built the extension and hustled with Google to get it listed on the app store.</p>
<p>It looked a bit like this:</p>
<p><img src="https://www.learnedlate.com/images/writing/18-months-6-pivots-35-mrr-what-pmf/4.webp" alt="Laptop showing a Google Sheet of bank transactions all marked Uncategorized"></p>
<p>The goal was to send out a big bang announcement to the 300+ people who had signed up and tell them about this exciting new app, followed by a marketing campaign on Reddit, Twitter, ProductHunt, etc.</p>
<p>A total of five people tried out the app, and nobody converted past the trial.</p>
<p>That 300+ audience likely wasn&#39;t as warm as I initially thought.</p>
<p>But something must have gotten them to visit the site.</p>
<p><img src="https://www.learnedlate.com/images/writing/18-months-6-pivots-35-mrr-what-pmf/5.webp" alt="PostHog charts of daily and weekly active users over the last 94 days"></p>
<p>I kept building and improving the flow, making the software more robust and the flow easier, but still didn&#39;t get any traction.</p>
<p>At that point, I thought, &quot;Yeah, maybe people aren&#39;t that interested in automatic transaction categorisation.&quot; LunchMoney, Monarch Money, and Tiller are all big in this space, but they only use rules.</p>
<p>Rules mean you define things like:</p>
<pre><code>IF description == ALDI, then category = Groceries
IF description == UBER, then category = Transport
</code></pre>
<p>I was doing this much smarter, and yet nobody cared.</p>
<p>My takeaway is that even if you build something technically superior, distribution and user education matter more than features.</p>
<p>Distribution was my next focus, but my old email list wasn&#39;t any good.</p>
<p>So I settled on LunchMoney, which has a large community and uses old rules. A perfect fit for me to optimise?</p>
<h2>Wrong Channel, Same Problem</h2>
<p>LunchMoney has an API that allows an app like mine to categorise transactions before sending results back to LunchMoney.</p>
<p>I quickly built an integration, wrapped it into a simple app, and advertised it on their Discord.</p>
<p>Only a few people became interested, though. Even after being featured in the Lunch Money monthly newsletter, only a few people signed up to try out the app, but nobody really stuck around.</p>
<p><img src="https://www.learnedlate.com/images/writing/18-months-6-pivots-35-mrr-what-pmf/6.webp" alt="Lunch Money email search result next to an expensesorted.com browser illustration with a training model dialog"></p>
<p>Maybe what I&#39;m offering is not a big enough problem to solve, I thought at that point.</p>
<p>On top of that, the competition is quite fierce, and with AI, it is only getting stronger. Just look at r/SideProject, and you&#39;ll find 345 different personal finance apps launched daily.</p>
<p><img src="https://www.learnedlate.com/images/writing/18-months-6-pivots-35-mrr-what-pmf/7.webp" alt="Reddit r/SideProject search results for “personal finance” showing budgeting app posts"></p>
<p>But then I think about the pain of tracking my own expenses every month: downloading bank CSVs, transforming them to Google Sheets, categorising them, and then fiddling with that newfound data in my analytics.</p>
<p>I&#39;ve tried different apps, and they all feel clumsy, expensive, lacking good analytics and smartness.</p>
<p>Maybe I&#39;m just not properly addressing the problem?</p>
<p>People don&#39;t seem to care about the process or how good it is; they care about the result. It needs to be easy to get there.</p>
<p>So, my approach of reading, training, categorising, and saving transactions was something everybody hated doing, no matter how smart.</p>
<p>My newsletter placement didn&#39;t increase retention—people tried stuff but didn&#39;t stick. It likely didn&#39;t solve a big enough problem or address the right problem.</p>
<p>There is clearly a difference between &quot;this is cool&quot; and &quot;I will pay for this&quot; or &quot;I need this&quot;.</p>
<h2>Solving the Wrong Problem</h2>
<p>When I visit Reddit, I see many personal finance communities, and all seem to revolve around the same recurring questions: How and where to save, how to track expenses, budget, and invest the savings.</p>
<p>On top of that, Monarch Money raised 75m in Series B. That&#39;s a signal that there is some market here.</p>
<p><img src="https://www.learnedlate.com/images/writing/18-months-6-pivots-35-mrr-what-pmf/8.webp" alt="Monarch website post announcing its $75M Series B financing with app screenshots"></p>
<p>Maybe nobody cares about the actual categorisation, but there is interest in answering the above questions and making people more aware of their financial habits.</p>
<p>The metrics I produce with my monthly flow and the conclusions I draw from them are exactly that—they worked for me.</p>
<p><img src="https://www.learnedlate.com/images/writing/18-months-6-pivots-35-mrr-what-pmf/9.webp" alt="Summary cards for income, expenses, savings and runway with monthly averages and annual projections"></p>
<p>So, my next iteration now is to start with just that—the stats I want and a super simple pathway to get there (at least that&#39;s what I think).</p>
<p>I&#39;ll stick to Google Sheets, which has become my little niche compared to all these other apps. I love controlling my data without dependency on some other service and the flexibility it gives.</p>
<p>Now, I guess it&#39;s time to sell and wait to see if I get any traction. I&#39;m still getting &quot;decent&quot; traffic.</p>
<p><img src="https://www.learnedlate.com/images/writing/18-months-6-pivots-35-mrr-what-pmf/10.webp" alt="PostHog web analytics for expensesorted.com showing 222 visitors, 831 page views and a visitors chart"></p>
<p>I don&#39;t want to spend money (just time) and thus won&#39;t advertise. B2C seems quite tough to win attention, especially when competing against companies that just raised 75m.</p>
<p><img src="https://www.learnedlate.com/images/writing/18-months-6-pivots-35-mrr-what-pmf/11.webp" alt="F5Bot dashboard listing monitored keywords such as “expense categories”"></p>
<p>I&#39;ve been posting Reddit replies via F5Bot (you get an email whenever a keyword you are tracking is mentioned and can reply) and boosting SEO—<a href="https://www.learnedlate.com/writing/automate-marketing-automate-anything">I&#39;ve outlined here</a> how I create blog posts for certain keywords and have been really improving my stats.</p>
<p><img src="https://www.learnedlate.com/images/writing/18-months-6-pivots-35-mrr-what-pmf/12.webp" alt="Google Search Console performance chart showing 67 clicks, 8.79K impressions and average position 48"></p>
<h2>Keep Learning</h2>
<p>I still don&#39;t know if I&#39;m building something people want or only solving my specific problem. Maybe that&#39;s the point - you don&#39;t know until you know.</p>
<p>If you&#39;re reading this and thinking, &quot;This sounds exactly like my journey,&quot; you&#39;re not alone. Many will be grinding in the $35 MRR range, not the $350K range you see in success stories.</p>
<p>If this makes you think twice about starting your project, don&#39;t let it discourage you.</p>
<p>Every failed experiment teaches you something. Sometimes it&#39;s about your market, sometimes about your approach, sometimes about yourself.</p>
<p>The difference between giving up and breaking through might just be one more pivot. Or it might be knowing when to quit and apply these lessons to something else.</p>
<p>$35 MRR isn&#39;t much, but it&#39;s $35 more than most side projects ever make. For now, that&#39;s enough to keep me curious about what the next iteration might bring.</p>
<p><em>Current iteration: <a href="https://www.expensesorted.com/personal-finance">expensesorted.com</a> if you&#39;re curious.</em></p>
]]></content:encoded>
    </item>
    <item>
      <title>Rediscovering the Known: Breathing</title>
      <link>https://www.learnedlate.com/writing/rediscovering-the-known-breathing</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/rediscovering-the-known-breathing</guid>
      <pubDate>Mon, 09 Jun 2025 00:00:00 GMT</pubDate>
      <description>My journey down the rabbit hole of nasal cycles, deviated septums, and the simple physical hack that finally let me breathe freely at night.</description>
      <content:encoded><![CDATA[<p>I&#39;ve held this one back for a long time, thinking it doesn&#39;t fit my typical writing style. But this is about rediscovering the known, things I learned late, after all.</p>
<p>So here&#39;s a wild one that dramatically changed a tiny part of my life: breathing.</p>
<p>This is not about some mindfulness mumbo jumbo or breathing exercises. It&#39;s a fact that I used to breathe through my mouth quite a lot and have completely changed that in the last five years.</p>
<p>Why is that such an achievement? Like with any habit, it’s hard to change.</p>
<p>In hindsight, diving down the rabbit hole and experimenting with myself on this has been quite an interesting journey.</p>
<p>My main symptom is that I sometimes can&#39;t breathe through my nose. I came up with all sorts of theories on why that might be. Dust allergy, hay fever, etc., have been top contenders.</p>
<p>I&#39;ve read books such as Breathe, trying to figure out how to get my nose unblocked. I started eating less inflammatory food, but nothing helped.</p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-breathing/1.webp" alt="Pasted image 20250609152317.png"></p>
<p>To force myself to nose-breathe, I taped my mouth shut at night (<a href="https://ai.hubermanlab.com/s/ECDvZto0">check out Huberman on the topic</a>). Some nights went well, some nights didn&#39;t.</p>
<p>I then discovered these nasal strips for people who snore. They lift your nostrils to improve airflow, which helps quite a bit. Not perfect, but better.</p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-breathing/2.webp" alt=""></p>
<p>(<a href="https://breatheright.nz/">source</a>)</p>
<h2>The Nasal Cycle</h2>
<p>One day, however, I learned about the nasal cycle.</p>
<p>This is a cool one, as even all you long-time nose breathers probably have never heard about it. It&#39;s an automatic mechanism that alternates breathing between your nostrils. I never knew and never noticed.</p>
<blockquote>
<p>The nasal cycle is a natural physiological process where one nostril is typically more open and active for breathing than the other, and this dominance alternates between the nostrils. This cycling of congestion and decongestion occurs within the nasal turbinates, which are structures lining the nasal passages. The cycle is regulated by the autonomic nervous system and can be influenced by various factors such as age, posture, and sleep.</p>
</blockquote>
<p>I realised that when my left nostril was active, I couldn&#39;t breathe well, but when my right nostril was active, no problem.</p>
<p>This had never been an issue during the day, but it was during the night. If my not-functioning nostril is active, I sleep terribly and mostly breathe through my mouth.</p>
<p>I’m not an expert, but the nasal cycle seems to switch every few hours. It stays the same for the whole night, though, if you sleep and don&#39;t move too much. Once I get up in the morning, I immediately notice it switching.</p>
<h2>Hacking the system</h2>
<p>My rhythm from then on was like so;</p>
<pre><code>if left nostril open; use nasal strip; sleep.
else if right nostril open; sleep.
</code></pre>
<p>I cut my tape demand in half, but it wasn&#39;t perfect, even with tape.</p>
<p>If only I could switch to my &quot;good&quot; nostril before sleeping...</p>
<p>I googled, researched, and let loose all of the AI agents available to solve this problem, but I couldn&#39;t find a solution.</p>
<p>It kept telling me this wasn&#39;t possible, as this was part of the AUTONOMIC nervous system. The part of our body that is supposed to run on autopilot (like breathing).</p>
<p>Then I had another revelation. When lying in a particular posture on the couch, I noticed my nostril switched.</p>
<p>After much trying and tweaking, I have now figured out how to switch the nasal cycle 90% of the time.</p>
<p>You lie down on the side, with the nostril you want to open upwards. So before I go to bed, I lie down on my left side, extend my arm straight under my head, and put my hand under my head to lift it up (roughly a 45-degree angle). My hand is on the side of my head, cheekbone height.</p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-breathing/3.webp" alt="Pasted image 20250609154114.png"></p>
<p>After about 10 minutes max, I notice the switch.</p>
<p>Now my routine is this:</p>
<pre><code>if left nostril open; switch nostril lying on the side; sleep.
else if right nostril open; sleep.
</code></pre>
<h2>The Bigger Picture</h2>
<p>Again, I have no clue about the science here, but I think a deviated septum causes this issue. It&#39;s a little wall in your house that separates your nasal pathways, and it can be bent to one side.</p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-breathing/4.webp" alt=""></p>
<p>(<a href="https://www.okoa.org/articles/is-surgery-necessary-to-treat-deviated-septum-problem">source</a>)</p>
<p>Don&#39;t ask me why we have these, but I&#39;ll tell you how they might relate to another fascinating topic: Jaws.</p>
<p>I first encountered this theory in a book by Bret Weinstein about us living in a 10,000-year-old body that is quite maladapted to modern times.</p>
<iframe src="https://www.youtube-nocookie.com/embed/JYpPu-NrYSI" width="728" height="409" title="YouTube video" loading="lazy" allowfullscreen></iframe>

<p>In short, our bodies are built for hunting and gathering, not for sitting at desks all day, not for staring at screens, or chewing soft food.</p>
<p>In Jaws, the authors argue that due to our change in diet (softer food than 10k years ago), our jaws don&#39;t properly develop. This is another topic that makes intuitive sense.</p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-breathing/5.webp" alt="Pasted image 20250609154216.png"></p>
<p>My teeth are crooked, even though I had braces when I was a kid, yet skulls found before soft food seem to always show straight teeth, molars, wisdom teeth, etc., all in place.</p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-breathing/6.webp" alt=""></p>
<p>(<a href="https://www.mewingapp.co/mewing-101">source</a>)</p>
<p>The book concludes that chewing not only grows the chewing muscle but also the bone, especially in younger years. If the Jawbone is bigger, all our teeth fit in nicely. It makes sense.</p>
<p>Why would we have evolved jaws that can&#39;t fit all our teeth and need wisdom teeth removed to avoid pain?!</p>
<p>It even looks wrong!</p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-breathing/7.webp" alt="Pasted image 20250609154745.png"></p>
<p>Anyway, how does that relate to breathing through your nose?</p>
<p>Well, it looks like a not fully widened palate (top of mouth), can bend your palate upwards <a href="https://www.kenhub.com/en/library/anatomy/the-palate">onto the nasal cavity</a>, which can cause the deviated septum.</p>
<p>This is a wild theory, but it looks like an improperly developed jaw might cause a deviated septum due to soft food and lead to issues when breathing through the nose.</p>
<p>Why even bother and not breathe through the mouth? Well, there is a ton of evidence that having your mouth shut has benefits such as lower cavity rate, less crooked teeth, better airflow, filtering of air, warming up of air, etc., just better performance, using our body as it is supposed to be used.</p>
<iframe src="https://www.youtube-nocookie.com/embed/h2aWYjSA1Jc" width="728" height="409" title="YouTube video" loading="lazy" allowfullscreen></iframe>

<p>It generally looks like it&#39;s too late for adults to grow their jaw bones to an impactful degree, but kids can.</p>
<p>My grandpa always told me to chew with my mouth shut and to stop complaining about the tough bread crust. He probably knew something here.</p>
<p>I make sure to give my kids chewy food; white bread is an absolute rarity in our house, and cutting the crust off is a sin.</p>
<p>Biltong, mastic chewing gum, and nuts are always available and are the preferred snacks.</p>
<p><img src="https://www.learnedlate.com/images/writing/rediscovering-the-known-breathing/8.webp" alt="Pasted image 20250610062247.png"></p>
<p>I&#39;ll report back in 10 years to see if it has any impact.</p>
<p>In the meantime, I&#39;d love to know if someone found my nasal cycle switch hack useful.</p>
<p>I&#39;m still fascinated by the journey of figuring this out. What we can learn about ourselves with these little life experiments is amazing.</p>
]]></content:encoded>
    </item>
    <item>
      <title>The Fisherman's Dilemma: Why 'Enough' Is the Hardest Financial Number to Find</title>
      <link>https://www.learnedlate.com/writing/the-fishermans-dilemma-why-enough</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/the-fishermans-dilemma-why-enough</guid>
      <pubDate>Wed, 04 Jun 2025 00:00:00 GMT</pubDate>
      <description>The fisherman and the businessman value time differently. I look at runway, cash flow and savings rate to see which way I lean.</description>
      <content:encoded><![CDATA[<blockquote>
<p>An enterprising tourist encounters a contented fisherman dozing by his boat. The tourist, embodying a capitalistic mindset, proceeds to lecture the fisherman on how he could expand his fishing operation—working longer, buying more boats, hiring staff, building a cannery, and eventually becoming wealthy enough to retire and enjoy a relaxed life by the sea. The fisherman calmly listens and then points out that he is already living that desired relaxed life in the present, without the decades of stressful striving</p>
</blockquote>
<p>Whenever I read this story, I can&#39;t help but think how true it is and how well it reflects our own lives.</p>
<p>Most of us will likely be thinking more like that businessman. Stressfully striving towards later enjoyment.</p>
<p>Too stressed, like Bryan Johnson walking outside with an umbrella to avoid the sun aging his skin.<br>Too stressed to take a year off, as it might hurt your career progression<br>Too stressed to downgrade your career to do something more fun.</p>
<p><img src="https://www.learnedlate.com/images/writing/the-fishermans-dilemma-why-enough/1.webp" alt="Instagram reel of a man holding an umbrella on a grass field, captioned “You know, the sun is great,”"></p>
<p>There have been moments in my life when I have done the same. <a href="https://www.learnedlate.com/writing/expat-series-moving-for-taxes">I moved to Cyprus</a> partially because of the taxes (also to be closer to the family), without checking too much about whether I would like it. The greed for these lower taxes, higher income, etc., partially influenced a poor life decision that caused me a lot of stress. In hindsight, I probably should have stayed in Australia and enjoyed the good life there.</p>
<p>Not always is the stressful striving worth it; we often lose sight of what is really important.</p>
<h2>Barking Up The Wrong Tree</h2>
<blockquote>
<p>&quot;Everything is a trade-off... Cyprus comes with low taxes, hot summers, and crazy bureaucracy&quot;</p>
</blockquote>
<p>In my <a href="https://www.learnedlate.com/writing/my-expat-journey">expat series</a>, I explored the idea that everything in life is a tradeoff, even the countries you might move to.</p>
<p>No country is perfect, but I see many people chasing that dream of moving to the UAE for the money, and I can&#39;t help but think of the fisherman (and my own mistakes).</p>
<p>Yeah, you will get a lot more money and pay no taxes. Still, you also move to an incredibly hot country, where life is lived indoors for part of the year, where the culture and values are very different and where you will likely spend a lot of time working hard and being stressed.</p>
<p>Ironically, often with the goal of returning to a relaxed life.</p>
<p>What if you just stayed home? Maybe you downsized on your big house and fancy car and realised that you&#39;re still quite happy.</p>
<p>I&#39;ve recently <a href="https://www.reddit.com/r/PersonalFinanceNZ/comments/1kww7gx/comment/mulieq5/">posted on Reddit</a> my mistakes and lessons learned from my journey through personal finance, and one comment that struck me the most was a guy who highlighted not to stress too much about it all.</p>
<p><img src="https://www.learnedlate.com/images/writing/the-fishermans-dilemma-why-enough/2.webp" alt="Reddit comments on balancing saving for the future with enjoying life now"></p>
<p>As pointed out, being less stressed doesn&#39;t mean you should travel to Europe on your credit card, but you need to strike a balance.</p>
<p>Avoiding too much of the stressful striving, but having some cushion to enjoy life.</p>
<h2>Finding Balance</h2>
<p>Most people can&#39;t stop working completely and live in a bus, and most people don&#39;t want to grind 80/h a week to own a mansion once they retire.</p>
<p>We all know people on both sides of the spectrum: those who do too little and enjoy life too much, and those who strive way too stressfully in the hope of enjoying later.</p>
<p>Some people might have no choice but to temporarily grind as it&#39;s more of a fight for survival. In many cases though, people will pay way too much for shiny things, live beyond their means or don&#39;t realise their potential.</p>
<p>Regardless of where you stand, it&#39;s always useful to take stock.</p>
<p><img src="https://www.learnedlate.com/images/writing/the-fishermans-dilemma-why-enough/3.webp" alt="Life balance visualizer with four parameter sliders and a Balance Score of 20"></p>
<p>(<a href="https://www.learnedlate.com/life-balance-visualizer">source</a>)</p>
<p>Things to look out for are how happy or stressed you are and how much you are looking into the future vs. living in the moment. <a href="https://www.learnedlate.com/life-balance-visualizer">This little calculator will give you a rough idea</a>.</p>
<p>There are several signs that indicate you might be going too far on either side of the spectrum.</p>
<p><img src="https://www.learnedlate.com/images/writing/the-fishermans-dilemma-why-enough/4.webp" alt="Balance score bar at 100, at the Businessman end of the scale"></p>
<p>(<a href="https://www.learnedlate.com/life-balance-visualizer">source</a>)</p>
<p>Signs you are too far on the businessman side:</p>
<ul>
<li><p>You abandoned your exercise routine due to &quot;lack of time&quot;</p>
</li>
<li><p>You miss out on important family events for work</p>
</li>
<li><p>You&#39;re unable to spend money on experiences without guilt</p>
</li>
<li><p>You measure self-worth entirely by career achievements</p>
</li>
</ul>
<p><img src="https://www.learnedlate.com/images/writing/the-fishermans-dilemma-why-enough/5.webp" alt="Balance score bar at -100, at the Fisherman end of the scale"></p>
<p>(<a href="https://www.learnedlate.com/life-balance-visualizer">source</a>)</p>
<p>Signs you are too far on the fisherman side:</p>
<ul>
<li><p>You live paycheck to paycheck by choice, not circumstance</p>
</li>
<li><p>&quot;She&#39;ll be right&quot; is your financial plan</p>
</li>
<li><p>Your children are missing opportunities due to finances</p>
</li>
<li><p>You turn down growth opportunities</p>
</li>
</ul>
<p>What these questions ultimately show about the businessman and the fisherman is that they both value time differently.</p>
<p>The fisherman values time in the present; he enjoys it right now, not worrying too much about what will happen in the future.</p>
<p>The businessman values time in the future; he sacrifices time now to enjoy later.</p>
<p>The big questions for most people will likely be, how much do i need to lean towards the businessman side.</p>
<p><strong>TLDR</strong>: I don&#39;t have an answer, but I can help to quantify things.</p>
<h2>A Tangible Balance</h2>
<p>Quantifying is easier than most people think.</p>
<p><img src="https://www.learnedlate.com/images/writing/the-fishermans-dilemma-why-enough/6.webp" alt="Financial snapshot: $12,000 monthly income, $10,000 spending, $50,000 savings, 16.7% savings rate, 5.0 months runway"></p>
<p>(<a href="https://www.expensesorted.com/personal-finance?screen=initialInsights">source</a>)</p>
<p>I&#39;d say you need to be aware of:</p>
<ol>
<li><p>your cash flow (what you spend, what you earn)</p>
</li>
<li><p>savings rate (how much of what you have left do you invest)</p>
</li>
<li><p>savings (how much do you already have)</p>
</li>
</ol>
<p>These are great as they let you draw simple conclusions immediately. (If you don’t track these yet, <a href="https://www.expensesorted.com/">a simple expense tool</a> that auto-categorizes and shows runway helps keep the numbers honest.)</p>
<p>Take runway, a parameter the fisherman intuitively would be aware of, as I assume, on that extreme end of the spectrum, he will use the runway as soon as he has it. Valuing his time right now.</p>
<p>In short, the fisherman will likely only work if he needs to. His entire life is likely also geared towards maximising that runway via low expenses.</p>
<p><img src="https://www.learnedlate.com/images/writing/the-fishermans-dilemma-why-enough/7.webp" alt="Formula: Years of Personal Runway equals savings divided by expenses per year minus income per year"></p>
<p>We met this family of five while travelling. They had been living in a bus for years (<a href="https://www.instagram.com/familyofthesea/">their Instagram sure looks like they&#39;re having a great time</a>). They would typically stay at a location for a couple of months, depending on where they could find work. That work would stock up their runway before they hit the road again for some time without working.</p>
<p>Very adventurous.</p>
<p>Something less risky could be finding a consulting gig with a nice hourly rate and working backwards from your annual expenses. Say you need a gross income of $150,000, and your hourly rate is $150. Then you need 1000 hours, or 19 hours per week.</p>
<p><img src="https://www.learnedlate.com/images/writing/the-fishermans-dilemma-why-enough/8.webp" alt="Table: hourly rate $150, gross income to cover expenses $150,000, 1,000 hours, 125 days, 19 weekly hours"></p>
<p>Now that&#39;s obviously all deep in fisherman territory, and if you believe the jungle will always provide, that&#39;s a great way to approach life and maximise for enjoyment.</p>
<p>But that&#39;s not a viable strategy for most. To balance things, it might be reasonable to keep the savings rate up a little, to let your investments work for you later or provide some safety.</p>
<p>Here, however, I can see how this quickly spirals into work, work, work, save, save, save, and people grinding away their lives.</p>
<p>How much runway you should have depends very much on your stage in life. Do you have kids? Are you young and can take risks? Are you able to downscale your cost of living?</p>
<p>Depending on this, you might be fine with six months or want to be extra sure and have two years&#39; worth of expenses invested.</p>
<p>Running the numbers won&#39;t give you all the answers, but it will give some clarity.</p>
<h2>Money is Replenishable; Time is not</h2>
<p>At the end of the day, you need to decide if you want to be more like the fisherman or more like the businessman. The above metrics of runway, hourly rate and cashflow are great to get a sense towards which side you might want to lean.</p>
<p>Everyone&#39;s ultimate scarce resource is time. If you are sinking a lot of time into something, it better have a good hourly rate, a great potential future hourly rate or be something you love doing.</p>
<blockquote>
<p>&quot;Money is replenishable; time is not&quot;</p>
</blockquote>
<p>Deep down the fisherman knows that and lives his life accordingly, that&#39;s why the story is so eye opening to most of us. Society today seems to turn us into businessmen, living beyond our means stuck in the hamster wheel.</p>
<p>Obviously not everyone is able to downsize, work less or take time off, but the fisherman doesn&#39;t seem to be someone who is particularly wealthy and seems to be getting along quite well. The story isn&#39;t pure fiction either. I&#39;ve seen plenty of these folks around the world and think there is a lot to learn from them.</p>
<p>I&#39;ll leave you with another one from Bryan Johnson:</p>
<p><img src="https://www.learnedlate.com/images/writing/the-fishermans-dilemma-why-enough/9.webp" alt="Instagram post comparing two men, projected age 81 versus 112, asking “What metrics are you basing healthy living on?”"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Automate Marketing, automate anything</title>
      <link>https://www.learnedlate.com/writing/automate-marketing-automate-anything</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/automate-marketing-automate-anything</guid>
      <pubDate>Tue, 27 May 2025 00:00:00 GMT</pubDate>
      <description>Automate not only coding, but also Marketing and Distribution using AI Agents and MCP Extensions</description>
      <content:encoded><![CDATA[<p>When I think about marketing, I don&#39;t exactly feel excitement. It&#39;s something I&#39;d really rather not do. I understand it&#39;s necessary, but yeah, leave me alone.</p>
<p>I watched this video the other day, and while it wasn&#39;t the video or the people in the video that blew my mind, it was more akin to a classic rediscovering the known moment.</p>
<p><img src="https://www.learnedlate.com/images/writing/automate-marketing-automate-anything/1.webp" alt=""></p>
<p>As a regular AI user, I know that certain tasks can be automated, but it never really clicked with marketing. This video changed that.</p>
<p><a href="https://x.com/theevanhq/status/1922928119498821989">https://x.com/theevanhq/status/1922928119498821989</a></p>
<p><strong>TLDR</strong>: You don&#39;t have to watch it, as the guy, for the most part, is boiling the ocean. Ultimately, what it comes down to, and what my key takeaway was, is that you can utilise AI to research keywords for a website and connect a set of tasks using extensions.</p>
<p>The workflows he mentions are nice to have, but a lot can be achieved by simply supercharging your AI client with an MCP.</p>
<p>MCP? Another one of these buzzwords. Just like the <a href="https://www.learnedlate.com/writing/bubble-biases">inner circles</a> always try to confuse normal people.</p>
<h2>MCP = Extension</h2>
<p>Don&#39;t let the buzzwords and acronyms deter you.</p>
<p>For most people, you can simply call it an extension, much like the extensions available for Google Chrome.</p>
<p>An MCP simply means that your AI, Claude in this case, utilises a specific interface to communicate with an extension.</p>
<p>We&#39;re so early that we&#39;re bugging end users with technical terms, such as MCP.</p>
<p>An MCP extension, for example, allows your AI to connect to an API or external application.</p>
<p>Here I&#39;m connecting Claude via an MCP extension to Lunch Money, so I can ask questions about my expenses.</p>
<p>For deeper automation of expense categorization and analysis, I also use <a href="https://www.expensesorted.com/">Expense Sorted</a> alongside the MCP setup.</p>
<p><img src="https://www.learnedlate.com/images/writing/automate-marketing-automate-anything/2.webp" alt="Pasted image 20250519103102.png"></p>
<p>There are countless extensions like this already available (Gumloop or <a href="https://glama.ai/mcp/servers?attributes=category:knowledge-and-memory">Glama</a> have a lot).</p>
<p><img src="https://www.learnedlate.com/images/writing/automate-marketing-automate-anything/3.webp" alt="Pasted image 20250519103420.png"></p>
<p><a href="https://modelcontextprotocol.io/quickstart/user">They are quite easy to install</a>, even for those without technical expertise, but they currently work only in Claude. ChatGPT announced that it will also support them in future versions.</p>
<h3>MCP Extensions in the Wild</h3>
<p>Here is where the video initially became quite confusing and tricked me.</p>
<p>The guy uses these overcomplicated workflow builders, such as <a href="https://n8n.io/?ps_partner_key=OGQ5Y2U0NTczN2Qz&ps_xid=G2fiG5DMKJ5b3j&gsxid=G2fiG5DMKJ5b3j&gspk=OGQ5Y2U0NTczN2Qz&gad_campaignid=21765012948&gbraid=0AAAAABUVYR3NbJyOXJkXIbW3SYYC9FNLy">n8n</a>, <a href="https://www.langflow.org/">Langflow</a>, or Gumloop - they certainly have their place - but what caught my attention most was scanning and interpreting Ahrefs tags for good keywords.</p>
<p><img src="https://www.learnedlate.com/images/writing/automate-marketing-automate-anything/4.webp" alt="Pasted image 20250519144804.png"></p>
<p>Let me explain.</p>
<p>When trying to improve your site&#39;s search engine ranking (SEO), you want to score extremely high on Google. How so?</p>
<ol>
<li><p>Identify popular search terms (high volume).</p>
</li>
<li><p>Pick the ones that aren&#39;t saturated yet (low KD=keyword difficulty)</p>
</li>
<li><p>Create content that talks about the keywords</p>
</li>
</ol>
<p>Eventually, Google will pick you up and rank you higher if you provide meaningful content.</p>
<p>Finding these keywords, though, can be a tedious and labour-intensive process, as you need to analyse them all and identify the ones that still offer opportunities and a good reach.</p>
<p><strong>TLDR</strong>: it will take you hours.</p>
<p>Even when using Claude, it will take you a long time.</p>
<p>Unless, that is, you plug Claude directly into AHrefs (the site that allows you to search for these keywords) via an MCP extension.</p>
<p>Then it can sift through all the data, identify what is most relevant, and provide some useful results for you. This is significantly more targeted; it filters, structures, and presents the results in a clear and organised way (<a href="https://claude.ai/public/artifacts/c31c1ee1-67e8-465d-bb24-d39a671a1cc5">see a sample artifact</a>).</p>
<p><img src="https://www.learnedlate.com/images/writing/automate-marketing-automate-anything/5.webp" alt="Pasted image 20250516080238.png"></p>
<h3>Getting it to do what you want</h3>
<p>Ok, hooking things up with an extension is one thing, you still need to get Claude to do what you want.</p>
<p>This involves structuring your prompt and MCP extension usage to make it behave more like an agent and running tasks on its own before presenting you with a final result.</p>
<p>Claude let&#39;s you create projects, with preset instructions for every prompt.</p>
<p><img src="https://www.learnedlate.com/images/writing/automate-marketing-automate-anything/6.webp" alt="Pasted image 20250520084209.png"></p>
<p>Here is what I did for my SEO targeted content generation:</p>
<p>Brand Voice: I generated a brand voice based on several of my past articles. It looks something like this and helps Claude create better content.</p>
<p><img src="https://www.learnedlate.com/images/writing/automate-marketing-automate-anything/7.webp" alt="Pasted image 20250520094505.png"></p>
<p>File Handling: I use Obsidian for my content workflow, which pairs nicely with a filesystem extension, allowing Claude to create files and update my kanban board.</p>
<pre><code>An md file format kanban board is here: &quot;~obsidian/Documents/notes/blog/Schedule.md&quot; 
When adding, a piece of content, create a file under &quot;~obsidian/Documents/notes/blog/draft&quot; 
When asked to add content to the kanban board add it to the &quot;Ready to Publish&quot; section and link to the file created under the draft folder. 
Use the filesystem.
</code></pre>
<p>General instructions workflow that breaks down what needs to be done.</p>
<pre><code>1. always research long tail keywords, non-branded, for the domain requested
2. The keywords should have combination of a low difficulty and a high search volume so when we find out and look for these keywords, we should always try and maximise for these two scores and find the optimum value. Find keywords with high volume 100+ and low-medium difficulty.
3. For every keyword that we have found that fulfilled the above criteria we should then go and search Google&#39;s top one and two pages for that keyword and find out what content has been produced for these pages. The idea is that we can identify gaps in the content that has already been created and target the new content that we want to create to to fill these gap
s
4. The ultimate goal is to create content suggestion or content briefs for the creation of content by a blog or on websites to to improve SEO
5. The output should be a detailed markdown file that can be saved for later usage

6. When creating blog posts, use this md header with a recent date.

---
title: &quot;Beyond LLMs: Advanced Bank Transaction Categorization Methods That Save Time&quot;
date: &quot;2025-05-15&quot;
summary: &quot;An exploration of advanced bank transaction categorization methods beyond LLMs, focusing on sentence transformers for time-saving, precision, and privacy.&quot;
---
</code></pre>
<p>This is my full workflow. I give Claude the tools, instruct it on how to use them, and then provide a step-by-step workflow to produce the desired result.</p>
<p>The result? With one prompt, Claude will run through the entire workflow and present me with a highly refined, usable result.</p>
<h3>Interesting MCP Collections</h3>
<p>With setups like these, you can do whatever you want—looking for an integration? Just search for an MCP. Most likely, this will direct you to a GitHub page with a brief introduction on how to install it.</p>
<p><img src="https://www.learnedlate.com/images/writing/automate-marketing-automate-anything/8.webp" alt="Pasted image 20250520151509.png"></p>
<p>I&#39;ve found these here quite useful: <a href="https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem">filesystem interactions</a>, <a href="https://github.com/kazuph/mcp-fetch">web requests with images</a>, <a href="https://github.com/cnych/seo-mcp/tree/main">SEO and AHrefs</a>, and <a href="https://www.gumloop.com/mcp">Gumloop</a> has a good collection, and this <a href="https://smithery.ai/">here is a general repo</a>.</p>
<p>I use fetch for another workflow, where I post a blog post of mine and let it generate assets to promote my Substack posts. Fetch retrieves the content and all images from my published articles.</p>
<p>Here is my rough workflow:</p>
<ol>
<li><p>I give Claude a link to an article in my social promotion project</p>
</li>
<li><p>Claude fetches the content and images using the MCP fetch extension</p>
</li>
<li><p>Claude then generates a file containing social posts for various platforms (e.g., LinkedIn, Twitter) using my brand voice</p>
</li>
<li><p>The file is then stored in my Obsidian folder, and a link is created in my content pipeline</p>
</li>
<li><p>I then review and schedule/publish the content (could be automated too)</p>
</li>
</ol>
<p><img src="https://www.learnedlate.com/images/writing/automate-marketing-automate-anything/9.webp" alt="Pasted image 20250519112922.png"></p>
<h3>Final Thoughts</h3>
<p>Whether you are using AI for marketing or not, I think the above should open your eyes to what you could be doing with any project you are working on.</p>
<p>If you want a pragmatic setup for MCP-driven workflows—planning, tooling selection, and hands-off automation—I offer fractional CTO services via <a href="https://www.learnedlate.com/">my consulting site ↗</a> to get you from idea to running system.</p>
<p>N8n and Gumloop then take this to a fully automated level, where even the AI client can be moved to the background and triggered by an event (think of a new user signing up to your platform, where you research their details and write a personalised welcome email, etc.).</p>
<p>What&#39;s so cool is that this not only increases the context of your AI, but it also structures it into a process and then produces a tangible outcome.</p>
<p>We&#39;ve essentially built our own minimal AI Agent - another one of those buzzwords floating around. MCP is the extension; AI Agent is when you plug it all together to do something more or less automatically.</p>
<p>Fun times! I&#39;d love to hear about what you&#39;re building and automating.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Building Apps With AI</title>
      <link>https://www.learnedlate.com/writing/building-complex-apps-with-ai</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/building-complex-apps-with-ai</guid>
      <pubDate>Wed, 21 May 2025 00:00:00 GMT</pubDate>
      <description>My four tactics for building and extending complex apps with AI in Cursor: rules and context, tasks, modular code and testing, with tips for beginners.</description>
      <content:encoded><![CDATA[<p>The pushback I hear the most from people, even experienced devs, is that AI can be used for <a href="https://x.com/karpathy/status/1886192184808149383?lang=en">vibe coding</a> silly games or basic apps without a lot of depth, but not for anything advanced. Let alone extending an already existing application.</p>
<p><img src="https://www.learnedlate.com/images/writing/building-complex-apps-with-ai/1.webp" alt=""></p>
<p>I want to try to keep this valuable for both developers and non-developers, but here is how I approach things and have been building or extending quite complex applications using AI with Cursor.</p>
<p>With a few simple tactics, I think anyone can start building better stuff, developer or not.</p>
<p>TLDR:</p>
<ol>
<li><p><strong>Rules and Context</strong>: Define what you want it to do very well.</p>
</li>
<li><p><strong>Tasks</strong>: Scope up every feature you build.</p>
</li>
<li><p><strong>Modularise</strong>: Eat the elephant piece by piece.</p>
</li>
<li><p><strong>Testing</strong>: If you get less involved in coding, you need to have a good way to test.</p>
</li>
</ol>
<p>I think we’re heading to a world where people won&#39;t be coding much anymore, but still need to be good at telling AI what to code. That involves thinking through how components work together. While in theory, everyone can be a developer, right now you still need to be quite good at giving the right instructions.</p>
<h2>Solid rules and Context</h2>
<p>AI models need to know exactly what to do. It&#39;s like working with an external development company.</p>
<p>If you don&#39;t tell them exactly what to do, they&#39;ll try to interpret your ambiguity and likely produce something you didn&#39;t ask for.</p>
<p><img src="https://www.learnedlate.com/images/writing/building-complex-apps-with-ai/2.webp" alt="Pasted image 20250515090256.png"></p>
<p>First thing here is to provide as much context as possible. If you&#39;re lazy, like I am, use <a href="https://www.learnedlate.com/writing/speaking-writing">speech-to-text</a>.</p>
<p>Be extremely specific about what you want, how you want it to be built, and include logs or screenshots. Also, provide references to where you have done something similar.</p>
<p><img src="https://www.learnedlate.com/images/writing/building-complex-apps-with-ai/3.webp" alt=""></p>
<p>Rules are part of the context, but they&#39;re the stuff you don&#39;t want to repeat for every prompt. Depending on your development environment, there are different ways to do this. Cursor has project rules, user rules and even file type rules.</p>
<p>Don&#39;t overthink it. What works best is to add whatever you repeat often to your prompts into your rules.</p>
<p><img src="https://www.learnedlate.com/images/writing/building-complex-apps-with-ai/4.webp" alt=""></p>
<p>Things like &quot;Build easy-to-maintain code by breaking up larger blocks into reusable components&quot; might seem obvious, but they can help improve the quality.</p>
<p><strong>For beginners: Don’t worry about the technical parts, instead focus on outlining what you want, with as much detail as possible.</strong></p>
<h2>Tasks</h2>
<p>To ensure you and the AI don&#39;t lose track of every action item for a new feature, I use a simple approach.</p>
<p>For every new feature, scope up what you want to build. In the prompt, say that you want to iterate on the best solution instead of implementing straight away.</p>
<p><img src="https://www.learnedlate.com/images/writing/building-complex-apps-with-ai/5.webp" alt="Pasted image 20250515105903.png"></p>
<p>Once you&#39;re happy with the game plan, let it create a requirements.md with tasks for each step of the implementation.</p>
<p>Now, go through it one by one and refer to the file to tick off what has been completed (or let AI do it). This is only partially for yourself, you mainly want AI to not forget about what you had planned.</p>
<p><img src="https://www.learnedlate.com/images/writing/building-complex-apps-with-ai/6.webp" alt=""></p>
<p>You can go all fancy with different solutions here, but I found a simple text file does the job.</p>
<p><strong>For beginners: Don’t stress about this, see it more as a tool to help AI.</strong></p>
<h2>Modularise</h2>
<p>If you just keep vibe coding, chances are AI will create these impossibly long code files. As a result, they become hard to maintain not only for humans but also for the AI model itself.</p>
<p>I think it has something to do with the size of the files; i.e., if you have more than 2,000 lines, Cursor struggles to read and edit the file properly (likely related to the LLM context window).</p>
<p>Rules can help here, but it is best to explicitly task AI to do a cleanup of the codebase.</p>
<p>Before you venture into these larger changes, ensure that you create a fresh branch—a copy of your codebase — to test the new changes. Newcomers might not know this, but understanding how Git works is going to save you, so make sure to learn about it.</p>
<p>A simple way to kick off a refactor is to:</p>
<ol>
<li><p>Task it with a refactor of the app to modularise and optimise for maintainability</p>
</li>
<li><p>Ideate through it first, then create a requirements.md</p>
</li>
<li><p>Work through the refactor step by step</p>
</li>
<li><p>Test if everything works as before</p>
</li>
</ol>
<p><strong>For beginners: You won’t have much experience to judge things, BUT not telling AI to modularise will make things even worse. So just fire away and trust the system.</strong></p>
<h2>Testing</h2>
<p>I spend a lot less time doing the actual coding. Here, my productivity has increased significantly.</p>
<p>While tests were important before, now that you are not writing the actual code, running modularised tests becomes crucial. If your codebase is nice, clean and modularised, you can test every individual module.</p>
<p>Good thing, AI is quite good at writing these tests and automating them for you. Don&#39;t go crazy. A couple of scripts that you can run prior to deploying changes will do.</p>
<p>Developer Experience becomes increasingly important here. You want life to be easy, and once these tests are in place, you can vibe code confidently knowing you’ll catch regressions. If you’d like help setting up a lean, automated test suite and CI for AI‑assisted projects, I offer <strong>fractional CTO support</strong> through my consulting practice: <a href="https://www.learnedlate.com/">Fractional CTO consulting ↗</a>.</p>
<p><strong>For beginners: Ask AI on how to best automate testing, but do it.</strong></p>
<h2>Annoying bits</h2>
<p>This is going to sound strange, but IYKYK.</p>
<p>When I used to develop software, I loved getting into a flow. A flow state is defined by entering a tunnel where you lose sense of time because you are so focused on a task. To be focused on a task, you need that immediate feedback and need to be able to go deep.</p>
<p>The way you code with AI is you prompt (ideally with voice and a lot of context), and then you wait. That wait I find is extremely annoying as it takes me out of my flow. Once AI is working to modify my codebase, I do something else, which gets me ripped out of the flow. Good thing I&#39;ve got Cold Turkey to stop me from going on Twitter, but really, anything can be a distraction here.</p>
<p>Anyhow, that&#39;s just some nostalgia.</p>
<p>What&#39;s quite cool is that almost everyone can now try coding with a very low barrier. The barriers for the advanced and more complex apps are still quite high, but these will also get lowered over time.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Bubble Biases</title>
      <link>https://www.learnedlate.com/writing/bubble-biases</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/bubble-biases</guid>
      <pubDate>Fri, 16 May 2025 00:00:00 GMT</pubDate>
      <description>Why I feel behind on AI when I look at people ahead of me, and ahead when I look outside my circle, with my time at SAP and Forgd as examples.</description>
      <content:encoded><![CDATA[<p>I remember quite well when I applied for a job at SAP.</p>
<p>At the time, the company had a very special reputation in Germany, similar to that of Google, Facebook, or Microsoft in the US.</p>
<p>If you want a job with one of these companies, you&#39;d better be an absolute top performer. Or at least that&#39;s what I thought.</p>
<p>I was worried and concerned that I wasn&#39;t good enough for the role. I eventually got it, and, funny enough, after a couple of months at SAP, I realised that most people there are absolutely normal. No wizards, no magicians.</p>
<p>It disenchanted the company for me, but whenever I mentioned that I now work for SAP, other people I spoke to thought I was some sort of genius.</p>
<p>I had stepped into an inner circle.</p>
<p>A circle that warps our sense of competence.</p>
<h2>Circles all the way down?</h2>
<p>I follow these highly successful people, and I see them doing incredibly well. <a href="https://x.com/levelsio">Pieter Levels</a> is one of them, churning out successful AI apps, building a huge following and making six figures a month.</p>
<p><img src="https://www.learnedlate.com/images/writing/bubble-biases/1.webp" alt="Pasted image 20250514132743.png"></p>
<p>When I see his posts, I think I&#39;m so far behind that I won&#39;t even be able to catch up with all this AI stuff.</p>
<p>It initially demotivates me, but then, when I talk to people outside of my circle, I realise that I am ahead of most people.</p>
<p>The concept of these circles is universal: you’re always looking in at people ahead of you and looking out to those behind. Recognising this dynamic can be eye-opening.</p>
<p>What describes it best is an infinite number of concentric circles.</p>
<p><img src="https://www.learnedlate.com/images/writing/bubble-biases/2.webp" alt=""></p>
<p>(<a href="https://www.learnedlate.com/concentric-circles">source</a>)</p>
<p>The further you zoom in, the more it feels like stepping into a prestigious group of people— the literal inner circle.</p>
<p>The further you zoom out, the more it feels like stepping outside of your group and realising that you do know more than most people outside.</p>
<p>It&#39;s bubbles or circles all the way down— and up.</p>
<p><img src="https://www.learnedlate.com/images/writing/bubble-biases/3.webp" alt=""></p>
<p>(<a href="https://www.learnedlate.com/concentric-circles">source</a>)</p>
<p>These circles are, of course, not one-dimensional. There are an endless number of parallel circles. Circles around solo founders, circles around home baristas or personal finance experts.</p>
<h2>Looking In.</h2>
<p>You&#39;ll always be in some circle, and there will always be a next circle you want to get into.</p>
<p>When I joined SAP, I joined that circle. Regardless of how it looked on the outside, inside, it was a group of colleagues at my same level, working on similar tasks.</p>
<p>However, there was another circle, with higher-earning principal consultants, senior managers, and architects.</p>
<p><img src="https://www.learnedlate.com/images/writing/bubble-biases/4.webp" alt=""></p>
<p>(<a href="https://www.learnedlate.com/concentric-circles">source</a>)</p>
<p>You keep comparing yourself to these people who are a lot better, and you won&#39;t feel great about yourself. It often makes you feel worse than you are.</p>
<p>When I joined Forgd as a consultant, I knew I was good at tokenomics, but I was only a hobby developer who liked building prototypes. After some time at the company, I quickly realised that the engineering team, just like everyone else, was putting their pants on one leg at a time. There was nothing special about them; in fact, I was able to add quite a lot of value.</p>
<p>It still stays a daunting experience looking at an inner circle, even if you&#39;ve had many cases where, after some time, the magic of what is inside that next circle disappeared.</p>
<p>People inside always look extremely advanced. Then, when you finally manage to get in, you see that they&#39;re not so different; they&#39;re just people like you.</p>
<h2>The Train Has Left The Station</h2>
<p>If the inner circle appears extremely advanced, it can create a sense of being too late. Too late to invest in Bitcoin, too late to start working on something you like, too late to become an architect.</p>
<p>When I got interested in Tokenomics, I thought the same. Everyone seemed way more advanced, but after I published a few articles with my thoughts, they resonated with a large audience. That showed me that even though it looked like the train had left the station, it hadn&#39;t. There was still plenty of value to be created.</p>
<p>The barrier to that next circle is ultimately only a perceived one. Everyone struggles with something, and everyone is overwhelmed by information. They might have their own circles they are looking to get into.</p>
<p>What helps most in this case is zooming out.</p>
<h2>Looking Out.</h2>
<p>The reality check when feeling ill-prepared for that next circle? Look outside of your current circle.</p>
<p>Most people outside will already think you are an expert.</p>
<p>I&#39;ve recently become interested in the impact of AI on the service industry, so I&#39;ve been in touch with some old friends and colleagues to learn more. Many of them, even those working for tech companies like SAP, still only use ChatGPT for writing emails and a limited amount of coding, nothing else. They haven&#39;t even heard of Cursor, Windsurf, Replit, or Bolt.new, the AI code editors that power much of this recent surge in software development.</p>
<p>For me, who thinks I&#39;m behind, and the train has left the station, this is a great reality check. If all of these smart people don&#39;t even use AI yet, then we must be super early, and in this particular field, I must be much deeper into the topic than they are.</p>
<p><img src="https://www.learnedlate.com/images/writing/bubble-biases/5.webp" alt=""></p>
<p>(<a href="https://www.learnedlate.com/concentric-circles">source</a>)</p>
<p>For this reality check from my friends, I&#39;m looking outside of my circle and seeing that I might not be that far behind, I might know a thing or two about what I&#39;ve been working on.</p>
<p>I might actually be part of the top x% of this particular area. That can make the next circle inside a lot less scary.</p>
<h2>Stepping Into The Next Circle</h2>
<p>Sometimes in life, an opportunity presents itself—an opportunity to advance to the next circle.</p>
<p>You won&#39;t be completely ready for it; if you were ready, you&#39;d already be in that circle. You&#39;ll have to jump into the deep end and figure it out.</p>
<p>In my early years at SAP, I was looking at the next circle, in this case, architects—the people who plan how software components work together to build a solution.</p>
<p>At some point, I had the opportunity to be the architect for a project. I wasn&#39;t ready. There wasn&#39;t anyone mentoring or advising me; it was a &#39;do it, work really hard, and figure it out&#39; kind of situation, so I raised my hand.</p>
<p>These situations are a trial by fire. It&#39;s the time in your life when you learn what you&#39;d otherwise learn in years, within a couple of weeks or months. Just because you are literally on fire, it&#39;s a high-stress situation, and you have to work very hard to get through it.</p>
<p>If you get a good chance, take it!</p>
<h2>What to make of this?</h2>
<p>The concept of a bubble bias suggests that people may fail to fully consider their current situation.</p>
<p>The bias might lead to a prejudice that things are not what they seem.</p>
<p>Looking in can be intimidating, but remember that everyone puts their pants on one leg at a time.</p>
<p>Looking out can help change the perspective on your current situation. Likely, things won&#39;t be as bad as they seem.</p>
<p>Next time you look at the super successful people on Twitter, think about what you have achieved and know that when compared to a group of people outside of the circle, you may already be among the top 2% in the space compared to the rest of the world.</p>
<p>It&#39;s also eye-opening in that it shows you how much opportunity still exists, and while the first train might have left the station, new trains are arriving.</p>
<p>My advice? Stay humble as to what you might not know. Be proud and look back at how far you&#39;ve come.</p>
<p>(Did I just rediscover the Impostor Syndrome here?)</p>
]]></content:encoded>
    </item>
    <item>
      <title>Speaking &gt; Writing 🤯</title>
      <link>https://www.learnedlate.com/writing/speaking-writing</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/speaking-writing</guid>
      <pubDate>Mon, 12 May 2025 00:00:00 GMT</pubDate>
      <description>I now speak most of my AI prompts instead of typing. Speech is about three times faster than the keyboard, and I use Superwhisper and macOS dictation.</description>
      <content:encoded><![CDATA[<p>In classic rediscovering the known fashion, I recently changed my way of working after &quot;learning&quot; that I can talk to my computer rather than type. Not that I wasn&#39;t aware of the technology, but you know how this sometimes goes. It needs that special realisation for it to sink in.</p>
<p>I spend a lot of time with one or multiple Cursor windows (when developing software), different AI clients, Obsidian for note-taking and writing, etc.</p>
<p>What I used to do all this time was type prompts and write instructions to AI via my keyboard. That&#39;s quite slow. I made a lot of typos, and since I&#39;m lazy, I often didn&#39;t provide sufficient context.</p>
<p>If you&#39;ve been using any sort of AI, you know that context is very, very important. Your spouse, family or friends already have much of that context, you don&#39;t have to explain your life to them whenever you ask a question. With AI, that&#39;s different.</p>
<p>To get a good response from any AI, you need to give it as much context as possible. And if you need to do that all day long, typing stuff, it will take you a long time.</p>
<p>That&#39;s why speaking out what you want to say is more natural and much faster.</p>
<p>Writing is three times slower than talking, so you&#39;ll get a 3x on your prompting speed (<a href="https://hci.stanford.edu/research/speech/Ubicomp18_pdf.pdf">study here</a>).</p>
<blockquote>
<p>“In our study, we found that text entry speeds, in words per minute (WPM), using speech were about 3.0 times faster than the keyboard for English (161.20 vs. 53.46 WPM) and about 2.8 times faster than the keyboard for Mandarin Chinese (108.43 vs. 31.31 WPM). Total error rates were also favorable to speech, with speech error rates being 20.4% lower than the keyboard error rates in English (2.93% vs. 3.68%), and 63.4% lower in Mandarin (7.51% vs. 20.54%). Thus, speech was demonstrably faster and more accurate than the keyboard.”</p>
</blockquote>
<p>Since figuring this out, I am using this feature all day for almost all of my prompts and AI interactions.</p>
<h2>Speech-to-text tools</h2>
<p>The cool thing about AI? Not only have the general-purpose language models evolved, but also other tools such as speech-to-text.</p>
<p>I started with <a href="https://superwhisper.com/">Superwhisper</a>, a nice Mac app that picks up most of what I&#39;m saying very accurately, turning it into text that you can insert or copy into any editor.</p>
<p><img src="https://www.learnedlate.com/images/writing/speaking-writing/1.webp" alt="Pasted image 20250424075154.png"></p>
<p>Then I discovered that Mac has the same built-in dictate feature as iPhone. It&#39;s not as accurate as Superwhisper, but for prompting, it does the job, and being a Mac native app, it is way more embedded into things (i.e., it will pause the music if you start dictating and resume once finished).</p>
<p><img src="https://www.learnedlate.com/images/writing/speaking-writing/2.webp" alt=""></p>
<p>You can use it right inside any text editor. Simply configure a hot key combo, and when you hit it, you start speaking. Once you&#39;ve finished, you hit it again. Done. You just saved yourself a lot of time.</p>
<p><img src="https://www.learnedlate.com/images/writing/speaking-writing/3.webp" alt="Pasted image 20250512082927.png"></p>
<p>Most native AI clients have a dictate feature built in on mobile or desktop that uses their own models to turn what you say into text with great accuracy.</p>
<h2>Other areas of application</h2>
<p>I have been using features like voice-to-text in other areas, but I have never considered using them for writing prompts.</p>
<p><a href="https://otter.ai/">Otter.ai</a>, <a href="https://fireflies.ai/">Fireflies</a>, etc., are great for transcribing meetings, summarising them, and using them to break down action items.</p>
<p>ChatGPT&#39;s conversation assistant is so incredibly good that I can&#39;t recommend it enough. You can have a real conversation for as long as you want, and the assistant will summarise your points at the end. The conversation is also reflected in text form in the normal app interface.</p>
<p>I think this might be where lots of our computer interactions are going. Why type when you can talk? That&#39;s how we humans do most things, too. Everyone uses voice messages with their friends.</p>
<p><img src="https://www.learnedlate.com/images/writing/speaking-writing/4.webp" alt="Pasted image 20250424074926.png"></p>
<h2>Writing &gt; Speaking??</h2>
<p>Not everywhere is speaking better though. I still prefer writing for note-taking and structured thinking, as it helps me digest thoughts more effectively. It&#39;s this deliberate slowing down that makes the difference. You tend to think a bit more before you write.</p>
<p>Writing places the burden of organising thoughts on the writer, whereas speaking often bloats the message if the person conveying the message hasn&#39;t fully thought it through. Writing helps make things more concise, if you have the time.</p>
<p><img src="https://www.learnedlate.com/images/writing/speaking-writing/5.webp" alt="Pasted image 20250513060951.png"></p>
<p>Additionally, when you speak a long paragraph, it won&#39;t be formatted nicely. Chatgpt in your prompt won&#39;t care, but if you use it to write an article like this one, it will simply be one big blob of text.</p>
<p>Word detection is not perfect either. There are plenty of words it won&#39;t pick up accurately. Some better models offer more accuracy (Superwhisper is better than Apple), but it&#39;s not all perfect.</p>
<p>It could be my mixed-up English accent. If you speak the perfect King&#39;s English, you might be alright.</p>
<p><img src="https://www.learnedlate.com/images/writing/speaking-writing/6.webp" alt="Pasted image 20250512143220.png"></p>
<p>Either way, I am super excited about the use in prompting AI, and it now feels wrong or burdensome to write a prompt with my keyboard instead of speech-to-text. If you frequently use AI, I recommend giving it a try.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Selling Your Time</title>
      <link>https://www.learnedlate.com/writing/selling-your-time</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/selling-your-time</guid>
      <pubDate>Wed, 30 Apr 2025 00:00:00 GMT</pubDate>
      <description>I calculated my hourly rate across jobs, from about 45 AUD in 2015 to 426 AUD in 2021 by working fewer hours. It's worth doing the math.</description>
      <content:encoded><![CDATA[<p>We all have this friend, Senior Vice Presidents of god knows what, making a ton of money and working long hours. Many of these folks are true busy bees, and it&#39;s a status symbol of sorts to work hard and long hours.</p>
<p>I have no problem with that if it&#39;s what they&#39;re truly passionate about.</p>
<p>If it isn&#39;t though, then they should start thinking about their work as selling their time.</p>
<p>In fact, I don&#39;t think it would harm anyone to make the connection between time and money.</p>
<p>Not only <a href="https://www.learnedlate.com/writing/money-can-buy-time-how-much-time">to buy time</a>, but also to judge how to spend it best. Your “runway” tells you how many months of freedom you’ve already got. If you don’t have that number at hand, a quick sheet will do. I use a <a href="https://www.expensesorted.com/">simple setup that calculates saving</a>s ÷ monthly expenses and updates automatically with bank data.</p>
<h2>How I went from $45 to $426 per hour</h2>
<p>Let&#39;s keep it simple. The time in your life is limited. Every hour that you spend working, therefore, can be seen as selling your time. Lawyers know this. A lot of these folks charge hourly rates.</p>
<p>However, if you have a regular job, your salary alone won’t show how well you’re compensated for your time.</p>
<p>You&#39;ll have to do a bit of math to figure out what you trade your precious life hours for.</p>
<p>In 2015, I was a Senior Solution Architect, making ~70K EUR per year (a really good salary in Germany at my age then), working 60 hours a week. That resulted in an hourly rate of just 25 EUR or 45 AUD.</p>
<p><img src="https://www.learnedlate.com/images/writing/selling-your-time/1.webp" alt="earn_low.png"></p>
<p>By 2019, however, I was a Principal Solution Architect, making 300k AUD per year (pretty good in Australia at my age then). I worked an average of 40 hours a week, which resulted in an hourly rate of 160 AUD.</p>
<p><img src="https://www.learnedlate.com/images/writing/selling-your-time/2.webp" alt="earn_med.png"></p>
<p>By 2021, I was still in my role, but I figured out that by cutting a lot of useless meetings and focusing on what&#39;s essential, I could significantly reduce my hours while keeping my pay. With roughly 15 hours per week, I got to an hourly rate of 426 AUD.</p>
<p><img src="https://www.learnedlate.com/images/writing/selling-your-time/3.webp" alt="earn_high.png"></p>
<p>These figures show stark differences. The biggest difference doesn&#39;t come from the pay raise, but from spending less time. This is an extreme example, but you&#39;d be surprised how inefficient these big tech companies are.</p>
<p>I ended up not liking the role I was in as it was just too salesy, and so I quit despite the decent hourly pay.</p>
<p>Either way, many people don&#39;t ever do this math and are unaware of where they stand.</p>
<p>What I like about doing the math is that it reveals this equalising metric. If a lower earner works less than a higher earner, they can easily out-earn a higher earner per hour.</p>
<p>It&#39;s a personal metric that levels the playing field (<a href="https://www.learnedlate.com/writing/money-can-buy-time-how-much-time">similar to runway</a>). If you don’t track it, start simple: savings ÷ monthly expenses. I keep mine in a <a href="https://www.expensesorted.com/">Google Sheet that imports from my bank</a> so I can see “months of freedom” at a glance—no budgeting rules, just reality.</p>
<p>Of course, my examples here are quite narrow and simplified. They only consider employees, don&#39;t factor in things that could reward you later, and leave aside meaning and fulfilment.</p>
<h2>Principal Agent</h2>
<p>Let&#39;s look at the self-employed, startup people and founders. There&#39;s no better way to start this than with some Econ 101: Principal-Agent.</p>
<p><img src="https://www.learnedlate.com/images/writing/selling-your-time/4.webp" alt="principalk agent.png"></p>
<p>Fundamentally, you are acting as an agent if you work for someone else for no equity. If you are acting as an agent, that&#39;s not bad at all; you are simply selling your time. Agents have much less risk and things to worry about; they just get paid cash.</p>
<p>If you have equity in something you work for, you lean more towards being a principal. At the core, you are not only selling your time for money but also for ownership, which could later be turned into a much higher reward.</p>
<p><img src="https://www.learnedlate.com/images/writing/selling-your-time/5.webp" alt="principal agen spectrum.png"></p>
<p>The more you move towards the principal side, the trickier it is to calculate how much you make per hour. You could be paid a lousy startup salary, making your hourly rate quite low, but then, if you get a good exit, it could boost it to levels that wouldn&#39;t be possible as just an agent. The principal side is all about risk and reward.</p>
<p>Risky reward often means maybe getting a big payout in the future, but maybe not.</p>
<p>Other things could boost your payout in the future:</p>
<ol>
<li><p>Joining a startup for low pay but cashing in with an exit.</p>
</li>
<li><p>Reading about Bitcoin in 2011 and deciding to buy some.</p>
</li>
<li><p>Learning a new skill and thus enabling you to sell your time for more.</p>
</li>
</ol>
<p>Many more exist, and they are all about evaluating risk and reward.</p>
<p>Let&#39;s say you&#39;ve joined a startup for a low salary, but with high hopes of an exit. A calculation like this could help:</p>
<p>Not easy to calculate, but here is what it could do to your hourly rate scenario.</p>
<p><img src="https://www.learnedlate.com/images/writing/selling-your-time/6.webp" alt="earn_equity.png"></p>
<p>It&#39;s not always possible to quantify everything and I&#39;m not suggesting you should. More important is to simply be aware of this metric.</p>
<h2>Why Should You Care About This Metric?</h2>
<p>Being aware can mean that you know that you are selling your time.</p>
<p>Next, you can make up your mind if you are happy about that or if you want to change something about how much you&#39;re selling your time for.</p>
<p>That happened to me when I moved to Australia with SAP. Personally, it was a great move, but career-wise, it wasn&#39;t. SAP Australia is a hub for sales and sales support in the region, with little engineering.</p>
<p>As a Software Engineer, there is little room to grow and move.</p>
<p>When this finally sank in, I changed my attitude. When my expertise was required, I helped out, stepped up, etc., but when it wasn&#39;t, I focused on other things and did not partake in the busy work of daily meetings.</p>
<p>Instead, I started to build Tokenomics DAO by writing articles about Token Economics.</p>
<p>This boosted my hourly rate directly, as I reduced the hours I worked, but also indirectly, as I was building something new, learning something new, with the potential for a later hourly pay boost.</p>
<p>As with many things in life, it <a href="https://www.learnedlate.com/writing/how-to-get-what-you-want-in-life">helps to be aware of something to start improving</a>.</p>
<h2>What does this mean for you?</h2>
<p>First, I encourage you to do the math right now - <a href="https://docs.google.com/spreadsheets/d/1nXnOvb0mAyX9tli_vHFj8xxQjh8UEBqPJBWUbrho5i0/edit?usp=sharing">here&#39;s my basic template</a>.</p>
<p>Second, think about what you&#39;re doing to boost your pay in the future. Are you learning something, have some nice equity somewhere, or are you building valuable connections?</p>
<p>Time is our real currency. If the two steps above leave you satisfied, awesome! Go on. If not, change something.</p>
<p>Selling time is just one side of the coin, though.</p>
<p>In my last piece, I wrote about <a href="https://www.learnedlate.com/writing/money-can-buy-time-how-much-time">how money can</a> <em><a href="https://www.learnedlate.com/writing/money-can-buy-time-how-much-time">buy</a></em> <a href="https://www.learnedlate.com/writing/money-can-buy-time-how-much-time">you time</a> — e.g., retirement before retirement or just trying something new. This piece flips that lens: it’s about how you <em>sell</em> your time, and whether you’re getting a good deal in return.</p>
<p>I see buying time as using your savings for a time off to learn something or recalibrate.</p>
<p>Selling time is about ensuring your work hours give you something meaningful — money, learning, opportunity.</p>
<p>If you want to work 80h/week, that&#39;s great, but that will only be sustainable if you do something with high payout, potentially high future payout or because you absolutely love doing it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Make Space for Your Best Work</title>
      <link>https://www.learnedlate.com/writing/make-space-for-your-best-work</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/make-space-for-your-best-work</guid>
      <pubDate>Thu, 24 Apr 2025 00:00:00 GMT</pubDate>
      <description>How I protect my best work: Cold Turkey blocks in the morning, speech to text, catching curiosity, quiet time, and using my peak hours.</description>
      <content:encoded><![CDATA[<p>I know how distracted I can be, but also how to deal with it.</p>
<p>When I am mentally strong, usually before an event occurs, I need to prepare myself for a moment of weakness.</p>
<p>You all know what I&#39;m talking about. If you have snacks in the pantry and you&#39;re wasting away on the couch, you will likely eat them. If you&#39;re like me, you will eat them all.</p>
<p>The trick that works for me? DON&#39;T BUY SNACKS.</p>
<p>Brutal as it sounds, we have nothing but nuts, yogurt and sometimes some 99% cocoa chocolate at home.</p>
<p>Applying this concept to my work life, I know that if I have Twitter, YouTube, Reddit, etc. available, I will use them in a moment of distraction, wasting time doomscrolling.</p>
<p>There is a time for staying up to date on things, but it&#39;s not while trying to focus!</p>
<p><img src="https://www.learnedlate.com/images/writing/make-space-for-your-best-work/1.webp" alt="Pasted image 20250424074036.png"></p>
<p>The trick? Before I go to bed, I enable <a href="https://getcoldturkey.com/">Cold Turkey</a> to block out my entire morning. With that, Twitter, YouTube, Reddit, etc. are completely blocked. I don&#39;t have any of these apps on my phone, and the URLs are also blocked. It takes considerable effort to install them, just like it would to buy snacks.</p>
<p><img src="https://www.learnedlate.com/images/writing/make-space-for-your-best-work/2.webp" alt="Pasted image 20250424074352.png"></p>
<p>I simply can&#39;t quickly check Twitter when I wake up and start working.</p>
<p>I guess we all have these little ways to negotiate with our inner selves.</p>
<p>I love hearing and discovering ways to ensure I spend time on what matters. My goal is to have as much productive work as possible so I have more free time to spend with the kids, surf, or read a book.</p>
<p>So here are a few things I&#39;ve learned and found valuable.</p>
<h2>Speak, Don&#39;t Type</h2>
<p>Talking to someone is much faster than writing; that&#39;s why many people these days resort to endlessly long voice messages.</p>
<p><img src="https://www.learnedlate.com/images/writing/make-space-for-your-best-work/3.webp" alt="Pasted image 20250424074926.png"></p>
<p>It&#39;s more efficient, you can do it while walking through the house or carrying a child.</p>
<p>What many don’t know is that you can use the same to talk to your computer.</p>
<p>I either use ChatGPT&#39;s voice feature to discuss a topic directly (it&#39;s insanely good!), or I use <a href="https://superwhisper.com/">Superwhisper</a> locally to write a detailed prompt in Cursor when coding, or even write an article.</p>
<p>It&#39;s a sleek little app that turns talk into text and inserts it straight into whatever you use to write.</p>
<p><img src="https://www.learnedlate.com/images/writing/make-space-for-your-best-work/4.webp" alt="Pasted image 20250424075154.png"></p>
<p>iPhones have a similar built-in feature, and I use it for note-taking (using the microphone icon on the keyboard).</p>
<p>Saves me a lot of time and doesn&#39;t make typos.</p>
<h2>Catch Curiosity Immediately</h2>
<p>&quot;Curiosity is perishable&quot; - I heard this on a <a href="https://open.spotify.com/episode/2KyMXeMQS0djxazcFJZaSb?si=b0338ee7a11d44dd">recent podcast with Naval Ravikant</a>, and it was a classic rediscovering the known moment. It was something I had heard about but never really internalised.</p>
<p>Have you ever had a moment of excitement about a topic that you would love to explore right now, but then stopped because you were busy with something else?</p>
<p>You might have briefly written down the thought to explore it later.</p>
<p>Later, you revisit the note, but the excitement is gone, and you never pursue it.</p>
<p>There is something magical about following that curiosity as it appears. It&#39;s not always possible, but diving in while you&#39;re excited can be great.</p>
<p>If you do, you don&#39;t have to push to work on it; it doesn’t feel like work at all, you get into a flow easily.</p>
<p>I generally have Apple Reminders and <a href="https://obsidian.md/">Obsidian</a> (my note-taking tool) open, to write down things in detail as quickly as possible when they arise.</p>
<p>When it comes to note-taking, speed is key. I don&#39;t want to think about where to write it down or review the correct header, as I might lose the thought. Therefore, I always have a blank page with Daily Thoughts open to write something down quickly.</p>
<h2>Give Your Mind Quiet Space</h2>
<p>Another overlooked aspect is allowing the brain to work.</p>
<p>On a stressful, tight-deadline project, I often find myself grinding away without pause, never giving my brain time to reflect. I keep chipping away at these little tasks, losing sight of the big picture.</p>
<p>I get lost in the weeds.</p>
<p>Sometimes, all it takes is sitting down in the morning to jot down my thoughts or going for a walk. The trick seems to be stepping away from the active problem-solving.</p>
<p>A mistake I often make is taking my phone when I go for a walk. While walking, I look things up or listen to a podcast, which bombards my brain with new content.</p>
<p>Some real downtime is the key. New ideas appear automatically, and problems get solved.</p>
<p><img src="https://www.learnedlate.com/images/writing/make-space-for-your-best-work/5.webp" alt="Pasted image 20250424091655.png"></p>
<p>How often have you heard someone having a brilliant idea in the shower?</p>
<p>In the shower, there&#39;s nothing else to focus on. You&#39;re left with your thoughts, allowing your brain to think freely and develop those great ideas. The time dedicated to letting your brain breathe is underestimated.</p>
<h2>Prioritise Your Peak Hours</h2>
<p>You just had a big lunch and got back to the desk to read some research reports. If you&#39;re like most, that won&#39;t be a pleasant experience. You&#39;re going to be fatigued, and even caffeine won&#39;t help you out. You&#39;ll have to force your way through them.</p>
<p>If you read the same research reports first thing in the morning, that would have likely been less of a fight.</p>
<p>There are moments where you need to be an operator, and other moments where you need to grind and others where you have high focus or creativity.</p>
<p>Our brains are able to accommodate all of these functions throughout the day, but it will be much harder if you time it wrong.</p>
<p>I&#39;m a morning person, so when I get up at five and have some coffee, I&#39;ll have intense focus and the ability to do some deep work for a couple of hours (if the kids let me).</p>
<p><img src="https://www.learnedlate.com/images/writing/make-space-for-your-best-work/6.webp" alt="Photo from Google Photos (3).jpg"></p>
<p>However, in the evening or after lunch, I&#39;m terrible at this stuff and need to do something more active, such as categorising expenses, paying invoices, answering emails, or fixing a few bugs.</p>
<p>We can&#39;t always control when we do what, but it can be useful to be aware of when throughout the day you are best suited for which task.</p>
<p>When I first learned about this, I did this exercise: I tracked my energy level and focus at every waking hour of the day. Do that with a simple scoring mechanism in a spreadsheet for a few days, and you&#39;ll get some good, rough insights into when you can do what.</p>
<h2>Managing Expectations</h2>
<p>When I listen to Andrew Huberman or Tim Ferriss and hear their sleep, exercise, and work protocols, I can&#39;t help but realise that these folks probably don&#39;t have kids or live under very different circumstances.</p>
<p>I hardly ever get a full night of sleep, and deep work sessions for more than an hour are tough too, when working from home.</p>
<p>That leads to me not viewing the morning sun outside and having a coffee first thing in the morning, instead of waiting for 90 minutes as Huberman recommends. I also don&#39;t track my sleep or calories, and probably don&#39;t do enough strength training.</p>
<p>Putting their advice into the right frame is important here. Learning from them is great, but one needs to manage expectations on what can and can&#39;t be done.</p>
<p>If your boss or customer sends you an urgent email in the morning, you likely won&#39;t wait until the afternoon.</p>
<p>As always, it&#39;s all about finding out what works for you.</p>
]]></content:encoded>
    </item>
    <item>
      <title>AI Just Made You Twice as Fast</title>
      <link>https://www.learnedlate.com/writing/ai-just-made-you-twice-as-fast</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/ai-just-made-you-twice-as-fast</guid>
      <pubDate>Sat, 19 Apr 2025 00:00:00 GMT</pubDate>
      <description>If AI makes everyone build faster, software may get cheaper. I think about what that means for developers, and why I want to stay flexible and creative.</description>
      <content:encoded><![CDATA[<p>Last week alone, I implemented several new features to Expense Sorted; I built a life calculator app for a post and an iOS mobile app to assist me in coffee brewing.</p>
<p><img src="https://www.learnedlate.com/images/writing/ai-just-made-you-twice-as-fast/1.webp" alt=""></p>
<p>I researched some articles supported by ChatGPT, generated images and logos, reviewed contracts and summarised topics.</p>
<p>That would have taken me multiple weeks, if not months, about four years ago.</p>
<p>Thanks to AI, almost every profession is becoming more efficient. Software developers create code faster, designers design faster, and writers research faster.</p>
<p>This is great, and I love the progress, but I want to know where it will take us. If we are all getting faster at building and doing stuff, won&#39;t that bring down the cost of services such as software development?</p>
<p>Won&#39;t that lower the cost of ghostwriters, website builders, etc?</p>
<p>If you&#39;re in this industry, you face stronger competition (more supply as everyone completes projects faster). If demand stays the same, then prices go down.</p>
<p>Does that mean that as AI improves, we will head down some sort of deflationary death spiral for all industries unrelated to physical labour (robots aren&#39;t quite there yet)?</p>
<h2>Everything Improved by AI</h2>
<p>One thing is certain: we haven&#39;t been replaced yet. We are in an augmentation phase, with AI improving many aspects of our lives.</p>
<p><a href="https://www.cursor.com/">Cursor</a> and <a href="https://windsurf.com/editor">Windsurf</a> improve how we code and prototype complete apps, but you&#39;re unlikely to get an MVP to run if you don&#39;t know how to code.</p>
<p>QuickBooks and Xero are tinkering with improving their accounting software with AI, but we&#39;re far from replacing accountants.</p>
<p>ChatGPT image generation might be good for stock images and Ghibli fun, but I doubt it replaces a designer already.</p>
<p>The general theme is that we are moving fast but still enhancing and improving people&#39;s productivity.</p>
<p>I think the Pareto principle is useful here. You might reach 80% of the solution quickly with AI, but the remaining 20% can be incredibly hard to complete.</p>
<p>I built my first mobile app last week and got it up and running with all the basics in about an hour, prompting AI. However, getting it to an MVP stage where I could deploy it to my phone and use it took me a couple of days, and I had to do a bit of coding myself.</p>
<p>Tobi Luetke from Shopify knows this and is giving clear orders; new headcount is only approved if AI cannot solve a problem.</p>
<p><img src="https://www.learnedlate.com/images/writing/ai-just-made-you-twice-as-fast/2.webp" alt=""></p>
<p><a href="https://x.com/tobi/status/1909251946235437514">source</a></p>
<h2>Build More Faster</h2>
<p>Let&#39;s take software again. Thanks to AI, coding has become one of the strongest areas of improvement.</p>
<p>You can see this from the specific models that ChatGPT offers just for coding.</p>
<p>Or services such as <a href="https://firebase.studio/">Google&#39;s Firebase</a> or <a href="https://bolt.new/">Bolt.new</a>, which let you build complete apps from a website.</p>
<p><img src="https://www.learnedlate.com/images/writing/ai-just-made-you-twice-as-fast/3.webp" alt="Pasted image 20250419065503.png"></p>
<p>Even with templates, an experienced dev would have taken a couple of hours or days to create something. Now, almost anyone can do it in just a couple of minutes.</p>
<p>Prototypes are cool, but what about real software?</p>
<p><img src="https://www.learnedlate.com/images/writing/ai-just-made-you-twice-as-fast/4.webp" alt=""></p>
<p><a href="https://x.com/shl/status/1912476090641101290">source</a></p>
<p>I follow the same process when I build software.</p>
<p>It&#39;s now more about specifying and prompting what you want to do, and then testing/controlling that AI has created what you want.</p>
<p>A new idea can be turned into a product much faster, a bug can be fixed faster, and a feature can be implemented faster.</p>
<h2>Cheaper</h2>
<p>Let&#39;s say a developer&#39;s efficiency is doubled. He can do what used to take him 8 hours in 4 hours.</p>
<p>For a business, that means it can either double the growth of its software division by hammering out new features faster or cut the team in half and increase the margin.</p>
<p>There are lots of trickle-down effects of this. Say we are churning out double the amount of software, which then helps other businesses be more efficient and increase their margins.</p>
<p>If all businesses do this, it might lead to a vastly increased availability of software (supply increases). Again, if demand doesn&#39;t also go up, the price of software should go down.</p>
<p>As individual software developers, we should experience some sort of similar effect. Absent new demand, we&#39;d just have a huge increase in supply, making all software cheaper. Ultimately, we would be paying developers less on average (or firing them).</p>
<p>Okay, this is the bearish case for software developers, but what if demand keeps this thing going? Let&#39;s compare it to the Industrial Revolution, when we started to automate things.</p>
<p><img src="https://www.learnedlate.com/images/writing/ai-just-made-you-twice-as-fast/5.webp" alt="Pasted image 20250419113109.png"></p>
<p>Back then, we produced clothing much faster, thanks to stuff like a steam-powered spinning mule, leading to factories producing more. However, due to competition, prices were also cut, and individuals were paid less as they didn&#39;t need all the individuals producing clothing anymore.</p>
<p>Sounds dramatic?</p>
<p>No, it worked out that we started to consume a lot more. Stuff got cheaper; people bought more. That got everyone more creative, producing stuff we hadn&#39;t thought about, and developing more jobs.</p>
<p>It might have been a temporary drop, but we then quickly adapted.</p>
<p><img src="https://www.learnedlate.com/images/writing/ai-just-made-you-twice-as-fast/6.webp" alt=""></p>
<p>A recent <a href="https://www.bis.org/publ/work1179.htm#:~:text=We%20find%20that%20AI%2C%20by,of%20these%20forces%2C%20which%20in">working paper</a> by the <strong>Bank for International Settlements</strong> found that AI-driven productivity growth, in the long run, <em>raises</em> output and incomes so much that it can increase overall consumption and investment.</p>
<p>With all the AI buzz, I can only imagine the energy required to meet the demand. I can&#39;t see this coming from Solar and Wind. Maybe it&#39;s time to get a nuclear engineering degree?</p>
<p><img src="https://www.learnedlate.com/images/writing/ai-just-made-you-twice-as-fast/7.webp" alt="Pasted image 20250419074111.png"></p>
<h2>Be Flexible to Weather the Storm</h2>
<p>Okay, things might change, and we might get paid less for some time.</p>
<p>But there will also likely be more demand emerging and new &quot;industries&quot; popping up with new things for people to do.</p>
<p>Here is where financial flexibility comes in. It&#39;s what allows people to adapt.</p>
<p>By that, I mean the ability to take some time off to start something, learn a new skill, or join a new interesting project. That&#39;s only possible if you have a little cushion to weather a storm and pivot to something new.</p>
<p>If you have that flexibility, you can focus on creativity. That might ultimately be what people do to figure out these new industries.</p>
<p>We are already seeing companies pivot and shift.</p>
<p>Gumroad, a platform for selling digital goods and services, seems to be pivoting towards AI agents for startups. This is very creative, and they seem to have the financial flexibility.</p>
<p><img src="https://www.learnedlate.com/images/writing/ai-just-made-you-twice-as-fast/8.webp" alt=""></p>
<p><a href="https://x.com/bentossell/status/1912560312630538563">source</a></p>
<p>If you see your job or business impacted, be smart and move to more relevant fields.</p>
<h2>Be More Creative</h2>
<p>Have you heard of vibe coding?</p>
<p><img src="https://www.learnedlate.com/images/writing/ai-just-made-you-twice-as-fast/9.webp" alt=""></p>
<p><a href="https://x.com/karpathy/status/1886192184808149383?lang=en">source</a></p>
<p>Some people are sceptical here, and for good reason; this doesn&#39;t sound like the approach you want someone to take for the software that runs your billion-dollar manufacturing business.</p>
<p>I think this might just be the beginning of something new. Coding has gotten much easier, efficiency has increased, and developers are becoming more playful. At the same time, tech improves.</p>
<p>What will come out of this creativity? I have no idea, but I&#39;m sure it will be more than browser-based flight games.</p>
<p><img src="https://www.learnedlate.com/images/writing/ai-just-made-you-twice-as-fast/10.webp" alt=""></p>
<p><a href="https://x.com/levelsio/status/1899596115210891751">source</a></p>
<p>Current AI systems seem to struggle with creativity. Naturally, this is what we can do to stay ahead and what will likely lead to new fields emerging.</p>
<p>Don&#39;t get me wrong; creativity goes beyond flight games here. It will go into completely new territory, figuring out how people will interact with a whole network of AI systems in the future, how to solve any newly emerging problems, and how to use all the freed-up productivity for something else.</p>
<h2>Be Ready</h2>
<p>It is important to find new ways to solve old or newly emerging problems, just as with the Industrial Revolution, the Agricultural Revolution, or any other. Things might look grim, but new things always emerge.</p>
<p>It&#39;s a rethinking of our current approaches. I&#39;ve been working on my Expense Sheets and services to improve things for a while, but I think it&#39;s time to change how we do this significantly.</p>
<p>How? I&#39;m not sure. It might involve interacting with your finances through an AI voice agent who acts like an accountant and does everything for you, simply feeding your reports.</p>
<p>To be ready for what might be coming our way, we should use AI as much as possible and be flexible and ready to adapt.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Money Can Buy Time - How Much Time Can You Buy?</title>
      <link>https://www.learnedlate.com/writing/money-can-buy-time-how-much-time</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/money-can-buy-time-how-much-time</guid>
      <pubDate>Wed, 09 Apr 2025 00:00:00 GMT</pubDate>
      <description>In a world where time is our most precious resource, why do so many of us spend the best years of our lives working only to save for retirement?</description>
      <content:encoded><![CDATA[<p>In a world where time is our most precious resource, why do so many of us spend the best years of our lives working only to save for retirement?</p>
<p>I want to explore some ideas around money and time.<br>At the core, money can be used for more than buying things.<br>A concept we are well aware of. It&#39;s called retirement.<br>My question, however, is, why only use that time for retirement?</p>
<p>Let&#39;s dive into personal runway, retirement before retirement and investing in yourself.</p>
<p>Understanding this concept and knowing your finances can enable you to take a leap. It&#39;s not just having savings; it&#39;s also knowing that time is much more valuable than money.</p>
<p>Why? Time is limited!</p>
<h2>How much time do you have?</h2>
<p><a href="https://waitbutwhy.com/2014/05/life-weeks.html">Tim Urban</a> brilliantly displays the days of our lives as a set of squares. Colours indicate different phases of one&#39;s life (below in blue, is the elapsed time of my life and the usual retirement age for people my age).</p>
<p>What&#39;s obvious is that we spend most of our fit and healthy years working and then have a ton of time off when we are not that fit and healthy anymore.</p>
<p>We call that retirement.</p>
<p>In a way, we are already buying time. We save money during the work phase to buy time during the retirement phase.</p>
<p><img src="https://www.learnedlate.com/images/writing/money-can-buy-time-how-much-time/1.webp" alt=""></p>
<p>(<a href="https://life-calendar-topaz.vercel.app/">I built a little calculator based on Tim Urbans&#39; diagram</a>)</p>
<p>The above diagram shows my progress - more than a third &quot;elapsed&quot;.</p>
<p>Let&#39;s overlay this with how healthy and fit a person is or their ability to spend time with their young kids or recover from a failed business.</p>
<p>Take <a href="https://www.who.int/data/gho/data/indicators/indicator-details/GHO/gho-ghe-hale-healthy-life-expectancy-at-birth">HALE</a>, healthy life expectancy, which is a statistic on a person&#39;s healthy life span.<br>Australians have a healthy life expectancy of ~70 years.</p>
<p>Add this to the diagram, and you&#39;ll see that statistically, you won&#39;t have much healthy time in your retirement.</p>
<p><img src="https://www.learnedlate.com/images/writing/money-can-buy-time-how-much-time/2.webp" alt=""></p>
<p>(<a href="https://life-calendar-topaz.vercel.app/">I built a little calculator based on Tim Urbans&#39; diagram</a>)</p>
<p>Additionally, <a href="https://www.bls.gov/opub/ted/2022/how-parents-used-their-time-in-2021.htm">statistics like these</a> show that our kids spend the most time with us when they are young. If we have kids with 28, that gives us ~12 years before spending time with them starts decreasing rapidly.</p>
<p><strong>The obvious question, then, is: Why don&#39;t we pull some of that green retirement phase into the younger years?</strong></p>
<p>It makes me think of my retired neighbours, who spend most of their day watching TV. They might want to do just that, but they may feel too old to do anything meaningful or exciting.</p>
<p>They likely spent their years working towards retirement, and when that day finally came, all pressure fell off their shoulders.</p>
<p>However, they might also have realised they were too old to do whatever they liked.</p>
<p>These are the moments when I think about my life and how I want to spend it.</p>
<p>I don’t want to wait until I&#39;m 67 to start doing what I want. I’d rather do it now.</p>
<h2>The Hamster Wheel</h2>
<p>Germans save money in state-powered pension recycling machines, Australians invest in stocks, and many other countries simply encourage buying and paying off houses.</p>
<p>Today&#39;s life is built around working towards retirement, which often traps people in an endless work cycle.</p>
<p>There is nothing wrong with putting something aside for later. It&#39;s just that some overdo it to a degree that gets them into the hamster wheel (or the Rat Race).</p>
<p>Let&#39;s say you&#39;re too worried about not having enough when you&#39;re old, so you borrow money and buy a house.</p>
<p><img src="https://www.learnedlate.com/images/writing/money-can-buy-time-how-much-time/3.webp" alt=""></p>
<p>That mortgage might get you into a situation where you have to keep working with no easy way out.</p>
<p>Many people are living above their means like this—mortgage or not.</p>
<p>By getting into this trap of spending too much, you lose your financial flexibility.</p>
<p>Being financially flexible means you’re not tied to a mortgage or lifestyle—and you can see that flexibility in a single number. I keep mine updated with <a href="https://www.expensesorted.com">Expense Sorted</a> so I know exactly how many months I can buy.</p>
<p>This does not mean you need to be rich.</p>
<p><a href="https://www.learnedlate.com/writing/fuck-you-money-doesnt-mean-you-need">Fuck you money doesn’t mean you need to be rich</a></p>
<p>It could simply mean you saved enough to quit your job and try something new for a few months.</p>
<p>How much you need and how much you can save depends on you.</p>
<p>Think of financial flexibility as a mini-retirement before you retire (if you need it, when you need it). Some might call it a sabbatical, but that often sounds like a long holiday to me.</p>
<p>Just use some of that retirement money right now. You can make up for it later. Who cares. Even if you need to retire a little later.</p>
<p><img src="https://www.learnedlate.com/images/writing/money-can-buy-time-how-much-time/4.webp" alt=""></p>
<p>(<a href="https://life-calendar-topaz.vercel.app/">I built a little calculator based on Tim Urbans&#39; diagram</a>)</p>
<h2>Wait, but how?</h2>
<p>Let&#39;s put this &quot;Money Can Buy You Time&quot; thing into a tangible formula.</p>
<p><img src="https://www.learnedlate.com/images/writing/money-can-buy-time-how-much-time/5.webp" alt=""></p>
<p>Let&#39;s say I have saved up to 300k, I earn nothing right now and spend about 100k per year.</p>
<p>I have a runway of three years.</p>
<p><img src="https://www.learnedlate.com/images/writing/money-can-buy-time-how-much-time/6.webp" alt=""></p>
<p>There are a thousand different variations of this. You could earn some income from investments or work part-time, which might greatly impact your runway. You could also not work at all.</p>
<p><img src="https://www.learnedlate.com/images/writing/money-can-buy-time-how-much-time/7.webp" alt="runway.jpg"></p>
<p>Similarly, if you manage to spend less, your runway increases too.</p>
<p>It’s simple, and you can start tracking/calculating it easily in any Google Sheet. No need to meticulously count every cent, even if you just do some napkin math on your annual totals.</p>
<p>Startups have this very same concept. It’s called runway, too.</p>
<p><img src="https://www.learnedlate.com/images/writing/money-can-buy-time-how-much-time/8.webp" alt=""></p>
<p>Personal Runway is a pretty cool metric.</p>
<p>Someone with lower savings can have a longer runway than someone with higher savings. Therefore, they also have higher financial flexibility.</p>
<p>If you make 500k a year but lease a Landcruiser, go on expensive holidays, and have a big house, your runway could be lower than that of someone who makes 100k a year and has a small apartment, no car, and a simple lifestyle.</p>
<p>There is no right or wrong here; you’ll have to find what works for you.</p>
<p>I lived in a bus, so what can go wrong?</p>
<p><img src="https://www.learnedlate.com/images/writing/money-can-buy-time-how-much-time/9.webp" alt="Photo IMG 3941.jpeg"></p>
<h2>What to do with the time?</h2>
<p>Buying time is still easier said than done.</p>
<p>Even if you have saved a lot and invested well, taking a leap and starting to use these savings is daunting.</p>
<p>After leaving my last job, I&#39;m doing this right now. I&#39;m confident it will lead to something, and at least I will be learning a lot.</p>
<p>You could do it like my neighbours and spend a year sitting on the couch, watching TV. Or you could travel, start a business, or learn something you’re interested in and passionate about.</p>
<p>Bill Perkins, in Die with Zero, explains this by arguing that you should spend your money early on great life experiences instead of waiting until you’re old and can no longer spend it.</p>
<p>Remember: Money is replenishable; time is not.</p>
<p>So, while you might lose 100k taking a year off, you’ve at least spent your time how you liked.</p>
<p>You will likely make that 100k back.</p>
<p>You most certainly won&#39;t get that year back.</p>
<p>PS: If you want a quick way to turn your savings, spending, and side income into a “months of runway” number, I built <a href="https://www.expensesorted.com">Expense Sorted</a> to do exactly that—no budgeting gymnastics required.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Understanding Tariffs</title>
      <link>https://www.learnedlate.com/writing/understanding-tariffs</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/understanding-tariffs</guid>
      <pubDate>Fri, 04 Apr 2025 00:00:00 GMT</pubDate>
      <description>What could the US be trying to do? Incentivise their local manufacturing base? Break the reserve currency feedback loop?</description>
      <content:encoded><![CDATA[<p>I haven’t been paying much attention to all this, but I got curious today after reading the <a href="https://x.com/LukeGromen/status/1907549316836897218">tweet below</a>.</p>
<p><img src="https://www.learnedlate.com/images/writing/understanding-tariffs/1.webp" alt=""></p>
<p>The tweet seemed cryptic at first, so I created a diagram to try to understand it.</p>
<p>But before we dive into that, let me give a brief primer on tariffs:</p>
<p>Tariffs are taxes on imported goods.</p>
<p>So when the US imports something from China (say a Huawei phone), it would cost $1000 without the tariffs. Introducing a 40% tax, aka tariff, will increase the price to $1400.</p>
<p><img src="https://www.learnedlate.com/images/writing/understanding-tariffs/2.webp" alt=""></p>
<p>Now, you might think, I’m not buying any Chinese products anyway, I don’t care.</p>
<h3>Supply Chains</h3>
<p>The above phone example was simple, but real life isn’t that simple.</p>
<p>From my time at SAP, I know that the BOM (a bill of material) is a complex list of parts that go into manufacturing something.</p>
<p><img src="https://www.learnedlate.com/images/writing/understanding-tariffs/3.webp" alt=""></p>
<p>(<a href="https://link.springer.com/chapter/10.1007/978-3-031-27933-1_34/figures/1">source</a>)</p>
<p>Takes this car.</p>
<p>BMW doesn’t put steel, rubber and oil into a factory to churn out fancy cars. No, they buy most of the parts already built to assemble the final product.</p>
<p>These parts reach from bolts to entire drive-trains or windshield wiper motors.</p>
<p>The supply chains for these goods are global, meaning stuff is sourced from various countries.</p>
<p>Most of the stuff needed for almost everything nowadays comes from China - the world’s factory.</p>
<p><img src="https://www.learnedlate.com/images/writing/understanding-tariffs/4.webp" alt=""></p>
<p>(<a href="https://theoregongroup.com/investment-news/tesla-supplier-panasonic-energy-plans-to-cut-china-supply-for-us-ev-battery-production/">just look at where stuff that goes into an EV is made</a>)</p>
<p>Imposing tariffs on China thus does not only increase the prices of products we directly associate with China.</p>
<p>They mostly come from indirect costs. Let’s say the windshield-wiper-motor and drive-train for a car increase its price by 40% when imported into the US. That will have some impact on the end price of the product.</p>
<p>Unless, of course, the manufacturer can source the product locally, and that local producer didn’t have to buy any parts from outside.</p>
<p>Tariffs, therefore, have the potential to make local manufacturing more competitive. To realise that potential, though, much of the supply chain would have to be in the US.</p>
<p>China wouldn’t be the world’s factory if the US could produce all of that stuff themselves.</p>
<p>Tariffs might be a good incentive, but it will take a lot of time and effort to really compete.</p>
<h3>Ripple Effect on Currency &amp; Trade</h3>
<p>Here is where it gets interesting regarding the supply and demand of currencies.</p>
<p>To simplify, I’ll stick to the US, China, USD, and Yuan.</p>
<p><img src="https://www.learnedlate.com/images/writing/understanding-tariffs/5.webp" alt=""></p>
<p>China is the world’s factory. That means that the US buys a lot more from China than China does from the US, which is called a trade deficit.</p>
<p>Put simply, China sends stuff to the US, and the US sends USD to China.</p>
<p>China uses these USD to</p>
<ol>
<li><p>invest in the US by buying land, property and stock with those USD</p>
</li>
<li><p>buy US debt (treasuries) and get interest on their USD</p>
</li>
<li><p>As factory of the world, you want your currency cheap, so they would likely not spend so much on buying their own Yuan</p>
</li>
<li><p>Buy gold as a reserve to diversify (<a href="https://www.gold.org/goldhub/gold-focus/2025/02/chinas-gold-market-update-central-bank-purchases-continue-january">which they have been increasing in recent years</a>)</p>
</li>
</ol>
<p>Add the tariffs, and China will likely sell less stuff to the US. It will become more expensive for US consumers to buy China’s goods.</p>
<p>Say over the next year, the US is going to buy 30% less from China, meaning China will have 30% less in USD.</p>
<p>Let’s make up some numbers here.</p>
<p><img src="https://www.learnedlate.com/images/writing/understanding-tariffs/6.webp" alt=""></p>
<p>I’m oversimplifying, but from an economics perspective, this means less demand for USD.</p>
<p>If supply stays the same, then the price of USD declines.</p>
<p>If the price of USD declines, it will buy Americans even less stuff from overseas.</p>
<p>It will also strengthen demand for US goods.</p>
<h3>If the US imports stuff, it exports USD.</h3>
<p>Right now, the biggest export of the US is USD. The whole world runs on USD.</p>
<p>When China buys oil from Saudi Arabia, it will likely be paid in USD.</p>
<p>The USD is the world’s reserve currency.</p>
<p>This is partially good for the US as it can print USD to buy tangible goods from other countries.</p>
<p>Because the U.S. dollar is in high demand globally, the U.S. can borrow in its own currency—cheaply and in massive amounts.</p>
<p>It runs persistent trade deficits to supply dollars to the world, and foreign buyers happily park those dollars in U.S. Treasuries. They trust the US and the demand for USD. This makes financing its debt easier than it would be for most other countries.</p>
<p>Guatemala couldn’t do the same, as its Quetzal is much less trustworthy and can’t be used in many places (it doesn’t have the same utility).</p>
<p>The flip side for the US, however, is that the dollar is quite expensive because of this great demand for the dollar.</p>
<p>An expensive dollar and the fact that the US can print money to buy stuff have led to a great decline in the US’s manufacturing capabilities.</p>
<p><img src="https://www.learnedlate.com/images/writing/understanding-tariffs/7.webp" alt=""></p>
<p>When you can’t produce stuff anymore, you get dependent on others. More importantly, though, you lose the knowledge of building stuff.</p>
<p>My good friend Jason wrote a great piece on how China is no longer copying but innovating at scale.</p>
<p><a href="https://orderingchaos.substack.com/p/what-is-chinese-for-innovation">What is Chinese for Innovation</a> (Ordering Chaos)</p>
<p>Forgetting how to make stuff seems like an important problem for a nation.</p>
<h3>Where is Trump going with this?</h3>
<p>Running a trade deficit means relying on others to fund your lifestyle.<br>That may be sustainable for some time—but it comes at the cost of domestic capability.</p>
<p>Tariffs might be the first real signal that the U.S. is trying to reverse that trade-off.</p>
<p><img src="https://www.learnedlate.com/images/writing/understanding-tariffs/8.webp" alt=""></p>
<p>This all starts to look like a feedback loop:</p>
<ol>
<li><p>The world demands dollars</p>
</li>
<li><p>The U.S. supplies them through trade deficits</p>
</li>
<li><p>Other countries recycle those dollars into U.S. debt</p>
</li>
<li><p>The U.S. borrows, buys, and imports more — fueling the loop, piling up debt and forgetting how to make stuff as they go.</p>
</li>
</ol>
<p>Tariffs might, therefore, be an attempt to break this loop.</p>
<p>By slowing trade and reducing dollar outflows, the U.S. could be giving up some of the benefits of reserve currency status in exchange for rebuilding domestic manufacturing and long-term economic resilience.</p>
<p>I’m barely qualified enough to guess here, but from what I’ve been reading, the topic of tariffs seems to be somewhat intentionally targeted in this direction.</p>
<p>That’s at least how I read this <a href="https://x.com/LukeGromen/status/1907549316836897218">tweet</a>.</p>
<p><img src="https://www.learnedlate.com/images/writing/understanding-tariffs/9.webp" alt=""></p>
<p>#Gold? Well, this likely leans on the idea that something needs to replace the USD as reserve currency. Gold has been around for a long time and has played a role in the past. Who knows if it will do it again?</p>
]]></content:encoded>
    </item>
    <item>
      <title>Expat Series: Cost of Living</title>
      <link>https://www.learnedlate.com/writing/expat-series-cost-of-living</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/expat-series-cost-of-living</guid>
      <pubDate>Wed, 02 Apr 2025 00:00:00 GMT</pubDate>
      <description>Cost of living is more than Numbeo prices. I cover groceries, housing, healthcare, cars and visas, drawing on moves to Singapore, Australia and Cyprus.</description>
      <content:encoded><![CDATA[<p>What if you moved to Singapore, checked groceries, and found that it was not too expensive?</p>
<p>You even know a local who says it’s pretty cheap, and he’s only spending 4k/month.</p>
<p>Let’s say that informed your move. You’ll hit the ground and realise it is cheap.</p>
<p>Except for your Western diet.</p>
<p><img src="https://www.learnedlate.com/images/writing/expat-series-cost-of-living/1.webp" alt=""></p>
<p>If you want to continue eating yoghurt or steak, that will cost you.</p>
<p>You&#39;ll be fine if you eat what the locals eat—local veggies, pork, chicken, eggs, and rice.</p>
<p><img src="https://www.learnedlate.com/images/writing/expat-series-cost-of-living/2.webp" alt=""></p>
<p>In this third piece of my <a href="https://www.learnedlate.com/writing/my-expat-journey">Expat series</a>, I want to uncover what I’ve learned about Cost of Living in different countries.</p>
<h2>Where to start?</h2>
<p><img src="https://www.learnedlate.com/images/writing/expat-series-cost-of-living/3.webp" alt=""></p>
<p>What makes up the cost of living?</p>
<p><img src="https://www.learnedlate.com/images/writing/expat-series-cost-of-living/4.webp" alt=""></p>
<p>(<a href="https://www.numbeo.com/cost-of-living/country_result.jsp?country=New+Zealand">source</a>)</p>
<p>The above stats are from Numbeo, a great source for starting your research. It lets you compare countries and cities, filter by specific expenses, and rank countries using indexes.</p>
<p>It breaks expenses down into</p>
<ul>
<li><p>Restaurants</p>
</li>
<li><p>Markets</p>
</li>
<li><p>Transportation</p>
</li>
<li><p>Utility</p>
</li>
<li><p>Sports and Leisure</p>
</li>
<li><p>Childcare</p>
</li>
<li><p>Clothing and Shoes</p>
</li>
<li><p>Rent</p>
</li>
</ul>
<p>I’ve been using it for every move.</p>
<p>But it’s not the only tool you should use. The data could be outdated or very specific, and it might not know about your lifestyle and circumstances.</p>
<p>I want to break this into the most common expense categories and share what I’ve learned.</p>
<h2>Groceries (Numbeo calls this Markets)</h2>
<p>Rolling pastures, large herds of free-roaming cattle and $20 for a block of factory cheese.</p>
<p><img src="https://www.learnedlate.com/images/writing/expat-series-cost-of-living/5.webp" alt=""></p>
<p>Welcome to New Zealand.</p>
<p>Contrary to what we had thought, cheese and dairy products are expensive. It seems like a lot of the dairy here is sent to China.</p>
<p><img src="https://www.learnedlate.com/images/writing/expat-series-cost-of-living/6.webp" alt=""></p>
<p>(<a href="https://www.rbnz.govt.nz/hub/publications/speech/2014/speech2014-05-07">source</a>)</p>
<p>So, how do you figure this all out upfront?</p>
<p>We typically work through this in different ways.</p>
<p>Sometimes, we go to the local supermarket websites and compare how much more expensive a basket of stuff we buy is.</p>
<p>This will uncover some of the issues described above. For example, if Yoghurt is 10x more expensive, you will find out here.</p>
<p>However, there is so much nuance in this topic.</p>
<p>Having lived in Australia for the last five years, we are spoilt with cheap grass-fed beef. Imported grain-fed beef from a different country might look cheap, but when you move and are used to the good stuff, it might not be available or costly.</p>
<p>Similarly, when comparing Australia to Germany. Australia does have cheese and even produces it. But if you want the good stuff, you’re bound to a small selection of imported cheese that is very expensive.</p>
<p>You’ll say the locals live there too and must be surviving, and that is true.</p>
<p>But think about the process and your routines.</p>
<p>I&#39;ve lived in Western countries for most of my life. I know how to cook Western meals, and I enjoy eating them. I know which ingredients to pick, etc.</p>
<p>It will take time and dedication to perfect Chicken Rice or Souvlaki to the level of your Goulash.</p>
<p>If you want the local cost of living, you have to blend in fully.</p>
<p>The more exotic country you move to, the more of a change this will be.</p>
<p>Exploring different cultures and cuisines is exciting, but your time is limited if you work and have kids to look after.</p>
<p>Initially, you’ll most likely spend more money on eating out, so have that covered.</p>
<p><strong>TL;DR: People in different countries eat different foods. Ensure you are ok with spending more on special food or adapting to a local diet.</strong></p>
<h2>Housing</h2>
<p>When you move to Singapore, you’ll likely do some napkin math on your net income based on the super low tax rate (~24% tops).</p>
<p><img src="https://www.learnedlate.com/images/writing/expat-series-cost-of-living/7.webp" alt=""></p>
<p>You start thinking about all the extra savings or what you can buy.</p>
<p>Similar to Sydney, where the income levels are quite high.</p>
<p>But wait until you find out what the rent is.</p>
<p><img src="https://www.learnedlate.com/images/writing/expat-series-cost-of-living/8.webp" alt=""></p>
<p>In Singapore, expats pay much more—so much that it can make up a much larger portion of their expenses than elsewhere.</p>
<p>That’s simply a reality you have to factor in. In most cases, if you get paid more or taxed less, there is a reason for that.</p>
<p>Generally, expats live a little differently than the locals—except maybe for Western countries such as Canada, Australia, Germany, and New Zealand.</p>
<p>Also, don’t underestimate the climate and the associated costs.</p>
<p>Singapore is hot and humid year-round. You’ll likely have an aircon running.</p>
<p>Germany has a long cold winter and you won’t make it without heating. It will cost you.</p>
<p><strong>TL;DR: High income and low taxes usually mean that housing is expensive.</strong></p>
<h2>Taxes</h2>
<p>These are a part of your cost of living. I’ve explored this topic in depth here:</p>
<p><a href="https://www.learnedlate.com/writing/expat-series-moving-for-taxes">Expat Series: Moving For Taxes</a></p>
<p><strong>TLDR: don’t move just for taxes. There are many hidden costs and intricacies. Taxes are complicated.</strong></p>
<h2>Healthcare</h2>
<p>There will be two scenarios:</p>
<ol>
<li><p>Healthcare in your destination country is better.</p>
</li>
<li><p>Healthcare in your destination country is worse.</p>
</li>
</ol>
<p>If it’s better, good. But that also means you will likely have to live with additional taxes or general costs.</p>
<p>If it’s worse, you will need additional insurance to cover you for whatever standards you are used to.</p>
<p>The healthcare you will get in a country also depends on your residency status.</p>
<p>In Australia, as temporary residents, you are not part of the public healthcare scheme.</p>
<p>The private insurance that covers you is very cheap, though.</p>
<p>Our first child was born while we were covered under private insurance, and we got special treatment, which was nice.</p>
<p><strong>TL;DR: Quality matters. Can you go local or want private?</strong></p>
<h2>Transportation</h2>
<p>As a young adult without kids in Singapore, you don&#39;t need a car. However, if you have kids and need to haul around toys and prams to different playgrounds, public transport can get quite annoying.</p>
<p>Cars are extremely expensive due to high taxes in Singapore.</p>
<p><img src="https://www.learnedlate.com/images/writing/expat-series-cost-of-living/9.webp" alt=""></p>
<p>Do you need a car? Can you afford to take a taxi everywhere?</p>
<p>Other places like New Zealand or Cyprus don’t work without a car; you’ll have to get one. Public transport isn’t an option.</p>
<p>Locals live here too, so cars are not expensive here.</p>
<p><strong>TL: DR: People might be getting around very differently.</strong></p>
<h2>International Goods</h2>
<p>Don’t take anything for granted.</p>
<p>We move a lot, so our lifestyle is not to attach ourselves to anything, and we generally do not own too much.</p>
<p>For furniture, we always try to buy second-hand.</p>
<p>If that’s not an option, Ikea is the best bet.</p>
<p>Ikea&#39;s quality is not great, but at least everyone knows what you get, so the resell value is quite good.</p>
<p>Most countries have an Ikea, except New Zealand (coming in 2025)!</p>
<p>If you have any specific things you like buying or favourite stores you can’t live without, make sure to check alternatives and prices.</p>
<p><strong>TL: DR: Is there anything you can’t live without?</strong></p>
<h2>Visa and residency cost</h2>
<p>You&#39;ll likely need a business to live in Cyprus and benefit from low taxes.</p>
<p>That business needs to be set up and maintained, and accounting and taxes need to be done. Because the bureaucracy is insane, you’ll need an agent to do it all for you.</p>
<p>This can easily cost you a couple of thousand / year.</p>
<p>In other countries, such as Thailand or Malaysia, getting a residency visa alone can cost quite a lot.</p>
<p><img src="https://www.learnedlate.com/images/writing/expat-series-cost-of-living/10.webp" alt=""></p>
<p><strong>TL: DR: You need a visa, which can be quite expensive or burdensome to set up.</strong></p>
<h2>Kids</h2>
<p>Whether you have some or you plan to.</p>
<p>In Singapore, we were planning to have kids, but our health insurance had a one-year period where they wouldn’t cover us for a birth.</p>
<p>Other things that can vary wildly between countries are daycare or school costs, as well as the level of education you want and can get your kids into.</p>
<p>Your support or access to schools will sometimes depend on your visa.</p>
<p>So, if you can’t send your kids to public school or don’t want them to attend one due to the poor education system, you’ll have to opt for a private school, which can be expensive.</p>
<h2>Wrapping Up</h2>
<p>DYOR, but also be flexible for uncertainties. Don’t budget the whole adventure in a way that leaves you no room for a little higher costs.</p>
<p>I discussed this in <a href="https://www.learnedlate.com/writing/expat-journey-know-before-you-go">Know Before You Go</a>. You must be ready to embrace the adventure.</p>
<p>Be flexible enough to reverse course if things don’t work out.</p>
<p>We’ve always found navigating this quite interesting, from switching our diet from meat to fish in Cyprus to trying out all sorts of other local produce in the different places we lived.</p>
<p>The main takeaway from cost of living is that the locals live there, too.</p>
<p>So whenever you see yourself spending exorbitant amounts of money, think about what the locals would do.</p>
<p>Here are some additional takeaways:</p>
<ol>
<li><p><strong>Adaptation Matters</strong>: Local food and products are affordable, while imported or specialty items typically dramatically increase costs.</p>
</li>
<li><p><strong>Housing Expectations</strong>: High-income or low-tax locations (like Singapore) often have significantly higher rent, lowering some financial advantages.</p>
</li>
<li><p><strong>Healthcare Reality Check</strong>: Healthcare quality varies greatly, and additional insurance costs should always be considered.</p>
</li>
<li><p><strong>Lifestyle Flexibility</strong>: Embrace local habits where possible and prioritise adaptability in your budget.</p>
</li>
</ol>
<p>On top of that, I can’t recommend enough to keep track of your expenses. This doesn’t need to be anything professional, just a simple spreadsheet, like <a href="https://www.expensesorted.com/">Expense Sorted</a> provides, will do.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Expat Series: Moving For Taxes</title>
      <link>https://www.learnedlate.com/writing/expat-series-moving-for-taxes</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/expat-series-moving-for-taxes</guid>
      <pubDate>Sat, 29 Mar 2025 00:00:00 GMT</pubDate>
      <description>Having lived in Singapore and Cyprus, I explain why moving for lower taxes is harder than it sounds, from residency rules to what taxes actually pay for.</description>
      <content:encoded><![CDATA[<blockquote>
<p>Have you ever thought about buying a one-way ticket and moving somewhere new and exciting?</p>
<p>I&#39;ve done that - six times by now.</p>
</blockquote>
<p>This second part of <a href="https://www.learnedlate.com/writing/my-expat-journey">my “Expat Journey” series</a> is about taxes!</p>
<p>Who wouldn’t want to keep collecting a solid income while cutting taxes by 20%?</p>
<p><img src="https://www.learnedlate.com/images/writing/expat-series-moving-for-taxes/1.webp" alt="Table: gross 250,000 at a 32% tax rate versus 12%, net income 170,000 versus 220,000, savings 50,000"></p>
<p>Tempting huh? There’s a catch, though. Low taxes might cost you more than you think. It’s often not the great idea that it first sounded like.</p>
<p><img src="https://www.learnedlate.com/images/writing/expat-series-moving-for-taxes/2.webp" alt="Bearded man with long hair captioned “Such a bad idea”"></p>
<p>Don’t let that greed cloud your thoughts.</p>
<h2>Why do I know?</h2>
<p>I lived in two low-tax countries, Singapore and Cyprus.</p>
<p><img src="https://www.learnedlate.com/images/writing/expat-series-moving-for-taxes/3.webp" alt="World map shaded by personal income tax rate, on a scale from 15 to 40"></p>
<p>(tax rates per country from <a href="https://taxsummaries.pwc.com/quick-charts/personal-income-tax-pit-rates">PWC</a>)</p>
<p>I can’t deny that giving away less of what I earned sounded super tempting, but that shouldn’t be all that drives you.</p>
<p><strong>Low taxes exist for a reason</strong>: If Cyprus had high taxes, far fewer people would want to live there.</p>
<p>It’s stinking hot in summer, we Westerners had issues with the low-trust culture, and it’s a tiny island full of tourists. The influx of all the tax savers seems to also make the locals quite pissed.</p>
<p>This experience made me reconsider how heavily taxes should factor into choosing a place to live.</p>
<h2>What do Taxes get you?</h2>
<p>In addition, one has to consider what taxes get you.</p>
<p>I’m not advocating for higher taxes, but many high-tax countries with high immigration must offer something else in return.</p>
<p>Maybe a great quality of life?</p>
<p><img src="https://www.learnedlate.com/images/writing/expat-series-moving-for-taxes/4.webp" alt="Two adults and a child walking across a suspension bridge in a mountain valley"></p>
<p>How is that quality of life created? Parks and beaches might be clean. It’s safe. There is good infrastructure and healthcare. Dealing with the government is relatively easy.</p>
<p>That’s all the stuff that taxes pay for.</p>
<p>Almost everything was possible online when I arrived in Singapore, with few bureaucratic processes. In Cyprus, for comparison, creating a company or lodging tax returns is an absolute nightmare, and it generally requires a third-party advisory firm.</p>
<p>Make sure to double-check this for your preferred country.</p>
<h2>The spectrum of saving</h2>
<p>If your move only saves you 10K and you need to use that to deal with advisory firms, company setups, tax statements in multiple countries, etc., then it quickly won’t be worth it. Consider first calculating your actual runway and expenses with <a href="https://www.expensesorted.com">ExpenseSorted ↗</a>.</p>
<p>The wealthier you are, the stronger the incentive to move becomes.</p>
<p><img src="https://www.learnedlate.com/images/writing/expat-series-moving-for-taxes/5.webp" alt="Table of gross income from 250,000 to 2,000,000 with net income at 32% and 12% tax and the savings from the reduction"></p>
<p>What also changes is the ability to compensate for inconveniences.</p>
<p>You could move to a guarded and managed complex in cheap Thailand to avoid the hectic everyday city life or hire an army of lawyers, accountants, and immigration consultants to handle the terrible bureaucratic processes.</p>
<p>For normal earners, these trade-offs might not balance out as nicely.</p>
<p>Where do you sit on the spectrum, and what will that get you where you’re moving?</p>
<h2>Most Beginners think reducing taxes is easy</h2>
<p>If it were easy, then everyone would do it. Think again.</p>
<p>I’ve been exploring this topic on Reddit and got some very interesting replies.</p>
<p><img src="https://www.learnedlate.com/images/writing/expat-series-moving-for-taxes/6.webp" alt="Reddit comment thread about US citizens, taxes and early retirement"></p>
<p>(<a href="https://www.reddit.com/r/ExpatFIRE/comments/1jegfq2/moving_for_taxes/">source</a>)</p>
<p>The thread above highlights the hoops people jump through to lower taxes, and this particular individual might be missing things, too.</p>
<p>Only time will tell.</p>
<p>Here is a common myth:</p>
<blockquote>
<p><em>Myth: “You can easily secure tax residency by staying just a few days.”</em></p>
<p><em>Reality: Countries like Australia, Canada, the US, and the UK have complex rules to prevent this.</em></p>
</blockquote>
<p>A common misconception, for example, is that you can get tax residency in a low-tax country and only spend a couple of days there to tick the box.</p>
<p>Say you don’t like the low-tax country much; you’d prefer to live somewhere nice.</p>
<p>You found the perfect deal:</p>
<p><img src="https://www.learnedlate.com/images/writing/expat-series-moving-for-taxes/7.webp" alt="Text describing the 60-day rule for Cyprus tax residency"></p>
<p>(Rules for Cyprus: <a href="https://taxsummaries.pwc.com/cyprus/individual/residence">source</a>)</p>
<p>But, what does your home country think about this?</p>
<p>I’m talking about the country you hold your passport in.</p>
<p>People don’t consider that that country might not be happy with you just deciding to pay your taxes elsewhere. So unless you plan never to return or renounce your citizenship, this adds to the complexity of your evaluation.</p>
<p><img src="https://www.learnedlate.com/images/writing/expat-series-moving-for-taxes/8.webp" alt="Australian and German passports on a wooden table"></p>
<p>Take Australia and Cyprus.</p>
<p>As an Australian, I need to rent a place in Cyprus and spend at least 60 days in the Country to get tax residency in Cyprus.</p>
<p>I also need to stop being an Australian tax resident by paying an exit tax, moving everything out of the country, and making that other country my permanent place of abode abroad.</p>
<p>It seems tricky to only spend 60 days somewhere and argue it’s your permanent place of residence…</p>
<p>That isn’t enough, though. If I stay for just a year and then decide to travel and return to Australia, they will likely claim that I have never left the tax residency.</p>
<p>Australia isn’t the only country with such complexity. The USA, Canada, New Zealand, Germany, and the UK seem to have similar rules in place.</p>
<p>Wealthy people might have their ways around, but it’s often not as simple as people think.</p>
<h2>What to look out for?</h2>
<p>If you think moving for taxes is easy, here are a few more goodies that might change your mind:</p>
<p><strong>The 180-day Rule:</strong> Spending less than half the year in a country may affect your residency and complicate your taxes.</p>
<p><strong>Travelling Around:</strong> Frequent travel might disrupt your tax residency. Countries want you to settle somewhere else to escape their tax net.</p>
<p><strong>Residency in Your Home Country:</strong> Your home country may not simply let you go—many have strict rules on what constitutes a genuine “move.”</p>
<p><strong>Complex Setup Requirements:</strong> Establishing residency involves paperwork, costly agents, and ongoing bureaucracy.</p>
<p><strong>Targeted Tax Savings:</strong> Which taxes are you aiming to reduce—income tax, capital gains, or corporate taxes? Each requires different strategies.</p>
<p><strong>Tax Treaties:</strong> Know with treaties exist between countries or risk double taxation and legal complications.</p>
<p><strong>Foreign Income:</strong> Just because you started a company in Singapore doesn’t mean your home country won’t tax the income.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Expat Journey: Know Before You Go</title>
      <link>https://www.learnedlate.com/writing/expat-journey-know-before-you-go</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/expat-journey-know-before-you-go</guid>
      <pubDate>Tue, 25 Mar 2025 00:00:00 GMT</pubDate>
      <description>Research alone won't fully prepare you. Embrace the adventure, but also make sure to tick off all the boxes.</description>
      <content:encoded><![CDATA[<blockquote>
<p>Have you ever thought about buying a one-way ticket and moving somewhere new and exciting?</p>
<p>I&#39;ve done that - six times by now.</p>
</blockquote>
<p>In this first part of <a href="https://www.learnedlate.com/writing/my-expat-journey">my “Expat Journey” series</a>, we’ll look into why research alone won’t tell you if a country is a good fit for you.</p>
<p>I’m unsure if evaluating a country gets better or worse with every move.</p>
<p>You’ll either be super confident with so much experience that you can live in any country or overly cautious and spend years researching every little detail.</p>
<p><img src="https://www.learnedlate.com/images/writing/expat-journey-know-before-you-go/1.webp" alt=""></p>
<p>I’ve learned that research is only a tiny part of the process. You can spend months diving into every little detail only to be surprised by some puzzle piece you missed once you arrive.</p>
<p>Maybe you ignored an early red flag that, after a couple of weeks, is so annoying that you can’t tolerate it anymore.</p>
<p>Before moving to Cyprus, we spent months researching all sorts of details: costs, lifestyle, weather, groceries, etc.</p>
<p>One of the things we missed was the tourist destination vibe that Cyprus brings.</p>
<p>I don’t mean this in a nice way.</p>
<p><img src="https://www.learnedlate.com/images/writing/expat-journey-know-before-you-go/2.webp" alt=""></p>
<p>There are large hotels everywhere, attracting tons of cheap, all-inclusive tourists who come to get a tan. However, what looked great on the postcard wasn&#39;t so good on the ground. This can be nice on a holiday, but trust me, you don’t want to live amidst a constantly changing crew of tourists.</p>
<p>It&#39;s hard to figure this all out upfront.</p>
<p>Say you did a short trip there and spent a week or two on the ground.</p>
<p>For us, these first weeks often feel like a little holiday. Maybe you had a nice Airbnb, the weather was great, and you just got a good vibe that empowered your decision.</p>
<p>Settling in can change that perspective. Once you get back to work and into the day-to-day grind of life, things become obvious that you wouldn&#39;t have spotted during a short trip.</p>
<h2>Our Naive Settling into Cyprus</h2>
<p>Let’s have a look at our move to Cyprus. We only stayed for about five months, which kind of says it all.</p>
<p>At the time, we had very young kids and were somewhat financially motivated to leave Australia.</p>
<p><img src="https://www.learnedlate.com/images/writing/expat-journey-know-before-you-go/3.webp" alt=""></p>
<p>We packed up after a ton of research and just left to check it out.</p>
<p>Waiting another year and going for a visit first wasn’t an option, so we decided to go.</p>
<p>Naive, you might think, and yes, I agree. For our circumstances at that time, however, it felt like the best way forward.</p>
<p>When we arrived, it was all new and exciting, and we wanted to explore; we had a family visit early on, the weather was nice, and I got some rare surfable waves.</p>
<p>Everyone was happy.</p>
<p>Four weeks later, it was a very different picture.</p>
<p>We discovered all these little annoying things:</p>
<ul>
<li><p><strong>Low trust culture:</strong> The most basic example is that markets have no price signs. Everything is haggling. The general transparency is low; you need personal connections and bribes to get through the fraud.</p>
</li>
<li><p><strong>Touristiness:</strong> Who wouldn&#39;t want to live in a place others go on holiday to? It depends on where you live. All the nice places near the beach were close to big, all-inclusive hotels. So close you could hear the music of the daily evening entertainment program.</p>
</li>
<li><p><strong>Food &amp; Groceries:</strong> On an island, not much is available. On top of that, if tourists come for the weather, the incentive for good food isn&#39;t that high. I remember looking forward to the Greek/Cypriot cuisine. On the ground, it was underwhelming.</p>
</li>
<li><p><strong>Bureaucracy:</strong> Everything needed a bribe or some paid agent that takes you somewhere to get you through the process. If you don’t want to cue up for hours on your residency permit, pay an agent who then bribes the officer.</p>
</li>
</ul>
<p>I’ve talked about the whole journey here on the <a href="https://open.substack.com/pub/thecoveredcall">The Covered Call Podcast</a>.</p>
<iframe src="https://www.youtube-nocookie.com/embed/jNCPTrG461w" width="728" height="409" title="YouTube video" loading="lazy" allowfullscreen></iframe>

<p><strong>The critical lesson?</strong> Despite careful planning, a fair bit of luck was involved in our previous successful moves. Luck that ran out in Cyprus.</p>
<p><strong>You can’t know everything upfront</strong>, and sometimes you just have to accept uncertainty as part of the adventure.</p>
<p>If you’re thinking of moving abroad, yes—research thoroughly.</p>
<p>But understand clearly that no matter how prepared you feel, surprises await.</p>
<p>Define your non-negotiables, be mentally flexible, and accept that some lessons only emerge from experience itself.</p>
<p>Have an exit strategy ready if you need to.</p>
<p>We left after just five months and were glad that we hadn’t anchored ourselves too much to living in Cyprus at that point.</p>
<p>We didn’t buy anything fancy, rented a cheap place and were financially flexible to pack up and go thanks to:</p>
<p><a href="https://www.learnedlate.com/writing/fuck-you-money-doesnt-mean-you-need">Fuck you money doesn’t mean you need to be rich</a></p>
<h2>What to look out for</h2>
<p>In general, here are things I look out for:</p>
<ol>
<li><p><strong>Purpose of the Move</strong>: Understanding your primary motivation will guide other decisions.</p>
</li>
<li><p><strong>Legal Requirements</strong>: Visa and work permits, what will your passport get you.</p>
</li>
<li><p><strong>Financial Considerations</strong>: Cost of living, income and employment as well as taxes play a role here.</p>
</li>
<li><p><strong>Healthcare</strong>: Quality, access and insurance (citizens often have different policies.</p>
</li>
<li><p><strong>Cultural and Social Factors</strong>: Language, cultural differences (such as a low trust culture) or availability of expat communities.</p>
</li>
<li><p><strong>Education</strong>: How will your kids go to school.</p>
</li>
<li><p><strong>Safety and Security</strong>: Crime rate, political stability.</p>
</li>
<li><p><strong>Infrastructure</strong>: Transportation (public/private), Utilities, proximity to Airports.</p>
</li>
<li><p><strong>Climate and Environment</strong>: Weather, temperature year round.</p>
</li>
<li><p><strong>Legal and Bureaucratic Environment</strong>: How easy is it to get registered, start a business etc.</p>
</li>
</ol>
]]></content:encoded>
    </item>
    <item>
      <title>My Expat Journey</title>
      <link>https://www.learnedlate.com/writing/my-expat-journey</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/my-expat-journey</guid>
      <pubDate>Fri, 21 Mar 2025 00:00:00 GMT</pubDate>
      <description>Lessons from living in six countries (Germany, Canada, Singapore, Australia, Cyprus and New Zealand), including trade-offs, cost of living and taxes.</description>
      <content:encoded><![CDATA[<p><img src="https://www.learnedlate.com/images/writing/my-expat-journey/1.webp" alt=""></p>
<p>Have you ever thought about buying a one-way ticket and moving somewhere new and exciting?</p>
<p>I&#39;ve done that - six times by now.</p>
<p>I spent most of my childhood in Germany, with a few years in Canada. As a young adult, I moved to Singapore and Australia on a professional adventure. From here, we tried a partly financially driven experiment and moved to Cyprus. Now, I live in New Zealand.</p>
<p>Exciting to some and daunting to others, I&#39;ve learned a lot of lessons from each move.</p>
<p>I&#39;m grateful for every one of them, as they have changed me as a person. Being exposed to different perspectives and viewpoints changes one&#39;s own.</p>
<p><img src="https://www.learnedlate.com/images/writing/my-expat-journey/2.webp" alt=""></p>
<p>However, moving countries isn&#39;t as rosy as it first seems. I&#39;ve had many challenging situations which have tested my relationships and forced me to make tough decisions.</p>
<p>Most recently, from our time in Cyprus, we abandoned ship after just ~five months. It was a mistake; we had to cut the losses and do something else.</p>
<p>I&#39;ve always wanted to share some more insights into this.</p>
<p>I vividly remember conversations from when I was still working for SAP in Germany. I talked to consultants who lived in three or four different countries. I found that fascinating, and it was a driving force behind my pursuit of something similar.</p>
<p>I will publish a series of posts, so I&#39;ll keep this short and break down what I think I will cover:</p>
<p>Here is what I&#39;ve learned from living in six different countries:</p>
<p><strong>Everything is a trade-off:</strong></p>
<p>There isn&#39;t a perfect country! Australia has perfect beaches but is isolated. Singapore has excellent food and travel but almost no nature. Cyprus comes with low taxes, hot summers, and crazy bureaucracy.</p>
<p>You&#39;ll have to define non-negotiables and sacrifice.</p>
<p><strong>Cost of Living:</strong></p>
<p>It&#39;s far more nuanced than you&#39;d think. Rent and groceries are one thing, but what about all these hidden little things that will creep up on you once you&#39;ve moved, like the monthly pool maintenance?</p>
<p><strong>Income vs. Expenses:</strong></p>
<p>Locals live there, too. The cost of living is one side. It can look daunting that rent in Sydney compared to Europe is astronomical until you find out that income in Sydney is astronomical, too, compared to Europe.</p>
<p><strong>Labor Arbitrage:</strong></p>
<p>Spend local, earn global. Digital nomads know this very well. Just make sure you&#39;re on the right side of this trade.</p>
<p><strong>Impact on your Life:</strong></p>
<p>Different cultures change you. You might not think of it this way, but if you go away for five years, your friends back home will have changed differently, possibly making you incompatible.</p>
<p><strong>Moving for Taxes:</strong></p>
<p>Low taxes are attractive, but sometimes there is a catch or a reason why that country has low taxes. You&#39;ll need to dig into that and the implications on your home country.</p>
<p><a href="https://www.learnedlate.com/writing/expat-series-moving-for-taxes">Expat Series: Moving For Taxes</a></p>
<p><strong>Know before you go:</strong></p>
<p>Research alone isn&#39;t enough. I&#39;ve had many occasions where the research was solid, but surprises quickly came up once we were on the ground. Planning an exploration trip can help.</p>
<p><a href="https://www.learnedlate.com/writing/expat-journey-know-before-you-go">Expat Journey: Know Before You Go</a></p>
<hr>
<p>These aren&#39;t just reflections of my own life. They will help anyone better navigate the common pitfalls of moving to and living in a different country.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Expense Sorted &amp; F-You Money Sheet V2</title>
      <link>https://www.learnedlate.com/writing/expense-sorted-and-f-you-money-sheet</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/expense-sorted-and-f-you-money-sheet</guid>
      <pubDate>Tue, 18 Mar 2025 00:00:00 GMT</pubDate>
      <description>I rebuilt Expense Sorted over a weekend so the categorisation runs from any Google Sheet, and updated the F-You Money sheet with savings and runway stats.</description>
      <content:encoded><![CDATA[<p>It&#39;s been a long time since I <a href="https://www.learnedlate.com/writing/expense-sorted-version-1-available">released version 1</a></p>
<p>I built the tool for myself and used it every month, but the setup was quite sketchy. It needed a database, an app, Replicate for the expense categorisation, and Google Sheets.</p>
<p>As this always goes, you keep using it until the pain is too high, at which point, ideas start forming about how to improve it. Ultimately, the day comes, and you rebuild the whole thing on a weekend. That&#39;s what I&#39;ve done.</p>
<p>I have returned to the initial idea of running all of the categorisation out of Google Sheets. For that, I have turned the categorisation into a simple backend service that is called from Google Sheets for both the training and the categorisation.</p>
<p><img src="https://www.learnedlate.com/images/writing/expense-sorted-and-f-you-money-sheet/1.webp" alt="Google Sheet “f-you-money-financial-overview” listing bank transactions with category columns"></p>
<h2>Sheet Updates</h2>
<p>On top of that, the sheet has been updated with some nice insights on savings. Here are the most important parts:</p>
<p>Expense Details now contains ALL your expenses and is not split into years:</p>
<p><img src="https://www.learnedlate.com/images/writing/expense-sorted-and-f-you-money-sheet/2.webp" alt="Same Google Sheet with colour-coded categories and tabs such as Expenses vs. Saving and Savings along the bottom"></p>
<p>Monthly expenses are now also a forever-list and not split into years, adding some nice state on savings:</p>
<p><img src="https://www.learnedlate.com/images/writing/expense-sorted-and-f-you-money-sheet/3.webp" alt="Monthly Expenses tab with income, tax, net savings and savings rate for each month"></p>
<p>A new Savings tab includes a quarterly report of your accounts and savings:</p>
<p><img src="https://www.learnedlate.com/images/writing/expense-sorted-and-f-you-money-sheet/4.webp" alt="Savings tab with quarterly balances per account and net asset value"></p>
<p>All of that allows for some interesting stats, including:</p>
<ul>
<li><p>Monthly average spend</p>
</li>
<li><p>Monthly average income</p>
</li>
<li><p>Years Runway</p>
</li>
</ul>
<p><img src="https://www.learnedlate.com/images/writing/expense-sorted-and-f-you-money-sheet/5.webp" alt="Expenses vs. Saving tab with summary tables and a chart of expenses against savings rate"></p>
<p>The year&#39;s runway is an interesting topic, and I will explore it further in future pieces, but I think people are not aware of this statistic.</p>
<p>I&#39;ve first described it in <a href="https://www.learnedlate.com/writing">Fuck You Money</a> and the initial sheet had it, but this gives it more attention.</p>
<h2>Simplify!</h2>
<p>I feel like Elon simplifying the raptor engine:</p>
<p><img src="https://www.learnedlate.com/images/writing/expense-sorted-and-f-you-money-sheet/6.webp" alt="Three SpaceX Raptor rocket engines labelled Raptor 1, Raptor 2 and Raptor 3 side by side"></p>
<p>It&#39;s probably not as cool, but I&#39;ve been able to significantly reduce the steps, apps involved, and interactions between them. Now, it all just works from Google Sheets and it does so from any Google Sheet.</p>
<p><img src="https://www.learnedlate.com/images/writing/expense-sorted-and-f-you-money-sheet/7.webp" alt="Sequence diagram of training and categorising between the Google Sheet extension, a Python backend API and the Replicate model"></p>
]]></content:encoded>
    </item>
    <item>
      <title>Using Obsidian and Cursor for writing</title>
      <link>https://www.learnedlate.com/writing/using-obsidian-and-cursor-for-writing</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/using-obsidian-and-cursor-for-writing</guid>
      <pubDate>Sat, 08 Mar 2025 00:00:00 GMT</pubDate>
      <description>I use Cursor with my Obsidian notes for writing. Obsidian is just markdown files, so Cursor can open the folder, summarise notes and spellcheck them.</description>
      <content:encoded><![CDATA[<p>I&#39;ve been using <a href="https://www.cursor.com/">Cursor</a> daily since 2023, and I love how it has been getting better since.</p>
<p>Cursor is pretty much a code editor with AI access deeply embedded into it. You can ask your favorite models (ChatGPT, Claude, R1) questions and let it interact directly with your codebase, giving it context in your prompts.</p>
<p>One of the best features is how it created suggestions on what it is going to change:</p>
<p><img src="https://www.learnedlate.com/images/writing/using-obsidian-and-cursor-for-writing/1.webp" alt="Cursor editor showing removed code in red and added code in green next to an AI chat panel"></p>
<p>In red is what will be removed and green what is added.</p>
<p>I also like writing and scribbling down notes and ideas, both personal and business-related, throughout the day.</p>
<p>Over the years, I&#39;ve used various tools for this, but I recently came across <a href="https://obsidian.md/">Obsidian</a>.</p>
<p>It syncs with my iCloud Drive, has a Mac and iPhone app, and most importantly, is based on good old markdown files.</p>
<p>For those who don&#39;t know markdown, the left shows the written text, and the right shows how it&#39;s stored as a simple text file on your computer.</p>
<p><img src="https://www.learnedlate.com/images/writing/using-obsidian-and-cursor-for-writing/2.webp" alt="Obsidian rendering of Heading 2, bullet, bold and link next to the same text as raw markdown"></p>
<h2>Here is where it gets interesting</h2>
<p>Because Obsidian has a simple foundation of files and folders, it can be opened just like any repo with Cursor.</p>
<p>This means you can use Cursor like you would use it as a development tool.</p>
<ol>
<li><p>You can give it context by adding multiple notes you have taken on a topic</p>
</li>
<li><p>You can let it summarise notes</p>
</li>
<li><p>It can spellcheck your stuff much better than Grammarly does.</p>
</li>
</ol>
<p>Here, I use the context of an article to draft a tweet.</p>
<p><img src="https://www.learnedlate.com/images/writing/using-obsidian-and-cursor-for-writing/3.webp" alt="Cursor chat panel drafting a tweet beside the markdown of the note “Act and Iterate On Ideas”"></p>
<p>I initially looked for an AI-assisted writing tool similar to Cursors. However, using Cursors seems to be much better.</p>
<h2>Further thoughts</h2>
<p>I&#39;ve been thinking about where this is all going.</p>
<p>I see note-taking, discussing things with AI, and analyzing what you have been writing as an ever-improving source of advice.</p>
<p>I value advice from people with as much of my context as possible. Good friends or my wife, for example. I can ask for advice and use them as a sounding board for life decisions.</p>
<p>I wrote about the idea in <a href="https://www.learnedlate.com/writing/sounding-board">Sounding Board</a>. If I can automate the process of providing context, AI models such as Grok could help out here and be much more efficient.</p>
<p>Privacy is a concern, but companies such as Venice.ai are working on decent AI models.</p>
<p>So when all the data remains on your machine and is only fed into an AI when needed, that&#39;s a cool Sounding Board.</p>
<ul>
<li><p>What if Obsidian had a plugin that would allow interaction similar to Cursor?</p>
</li>
<li><p>What if it would add summaries of your discussions with it for later use?</p>
</li>
<li><p>What if it had access to your calendar and knew what&#39;s going on in your life?</p>
</li>
<li><p>What if it accessed your social media posts, DMs, etc.?</p>
</li>
<li><p>What if you could then simply ask it questions and provide context from your Obsidian notes?</p>
</li>
</ul>
<p>I&#39;ve been playing with <a href="https://www.obsidiancopilot.com/en">Copilot for Obsidian</a>, which seems to be a Cursor clone. Unsure if this will tick all the boxes, but it looks like a good step in the right direction.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Acting and Iterating on Ideas</title>
      <link>https://www.learnedlate.com/writing/acting-and-iterating-on-ideas</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/acting-and-iterating-on-ideas</guid>
      <pubDate>Sat, 01 Mar 2025 00:00:00 GMT</pubDate>
      <description>Most dev teams overthink decisions. I write about timeboxing a try, iterating, and moving on when a choice stops fitting, with our Supabase decision.</description>
      <content:encoded><![CDATA[<p>Most dev teams are highly inefficient as they waste time not iterating properly. They are afraid to act and overthink coding issues or architecture decisions.</p>
<p>To build fast, you need to iterate on ideas, not mull them over a thousand times until you have evaluated the seemingly perfect solution.</p>
<p>The mantra here is taking action. Why? There are too many unknowns.</p>
<p>Things will evolve quickly, so you need to be quick, too.</p>
<p>This is especially important in a startup environment. If you don&#39;t move fast enough, you might miss that potential client, a grant, or just being in the right place at the right time.</p>
<p>In The Good Enough Mindset, I&#39;ve outlined my thoughts on choosing a good enough solution over a perfect solution, and this is very much the idea here, too.</p>
<p><img src="https://www.learnedlate.com/images/writing/acting-and-iterating-on-ideas/1.webp" alt="Diagram from hack to perfect: “Good enough!” sits at 20% effort, with the remaining 80% effort to reach perfect"></p>
<p>This time, however, I want to explore the topic of acting quickly and then iterating on these ideas.</p>
<p>The core theme is this: Perfection can come later—progress is what keeps you alive.</p>
<p>We had to pick a database framework that would enable us to query it easily from our codebase and get type-safety and user authentication as well as security. We went ahead and implemented Supabase in a quick decision and it helped us to speed up development at that time.</p>
<p>Do we still use it today? Only partially, and we will likely move away from it in the long run.</p>
<p>We acted out of an urgent need. We had to build these features, and creating complicated APIs for everything was taking too long. Picking a framework saved the day.</p>
<p>Was it perfect? No.</p>
<h2>Endless debates and theory</h2>
<p><img src="https://www.learnedlate.com/images/writing/acting-and-iterating-on-ideas/2.webp" alt="Cartoon tweet “Thinker VS Doer: Which team are you from?” with a doer standing on blocks reaching a diamond"></p>
<p>(credit: <a href="https://x.com/victor_bigfield/status/1893218991633539170">https://x.com/victor_bigfield/status/1893218991633539170</a>)</p>
<p>Are you familiar with endless debates on what would be the best solution to solve a problem?</p>
<p>You have a problem, you have an idea, and you might have a couple of solutions in mind already.</p>
<p>Sometimes, this derails into an endless back-and-forth on what the perfect solution could be.</p>
<p>Let&#39;s say you need a new ORM (the thing that connects your code to your database).</p>
<p>Great. Disclaimer: You won&#39;t find a perfect one; they all have tradeoffs.</p>
<p>Do a quick assessment of the close candidates and then simply integrate one for a small part of your project. Get a feel for how it&#39;s working.</p>
<p>What if it doesn&#39;t work?! Great. Now, you have wasted a little bit of time but have learned something and can try the other solution with a better idea of what to look out for.</p>
<p>You could have planned this all out and studied all the different options carefully, created spreadsheets of pros and cons, debated past experiences with colleagues. This would have likely taken you quite some time and still left some blind spots.</p>
<p>The reality is that you will have to do some evaluation upfront; everything else seems a little reckless. I find that Claude or Grok are pretty good at debating and discussing options and then providing a solid summary of the findings.</p>
<p><img src="https://www.learnedlate.com/images/writing/acting-and-iterating-on-ideas/3.webp" alt="Grok 3 comparison table of the ORMs Prisma, TypeORM and Sequelize"></p>
<p>A pragmatic approach is to limit the research to a set number of hours, then decide and proceed.</p>
<h2>Just try something</h2>
<p>Define a goal and work toward it. For example, you could build a new API for a new feature, but you would need to do that with a new framework to try it out. Timebox that to two hours and see how far you get and how you like it.</p>
<p>The important bits are defining a clear goal of what you want to achieve and running a tight feedback loop.</p>
<p>The worst thing you can do is lock yourself into your room for three days and then come back and decide that this wasn&#39;t the right solution.</p>
<p>The better way would be to timebox it and then reflect regularly on how it&#39;s going. Maybe even get on a call with a colleague to discuss findings.</p>
<h2>Sunk cost fallacy</h2>
<p>Okay, so what happens when you decide on a solution but realize after a couple of months that it is no longer a good fit?</p>
<p>You should not continue down that path because you made a decision, and it would be too costly to reverse it.</p>
<p>We had to implement that database framework back then, or else we wouldn&#39;t have gotten to where we were four months later. No regrets.</p>
<p><img src="https://www.learnedlate.com/images/writing/acting-and-iterating-on-ideas/4.webp" alt="Tweet about the sunk cost fallacy with a teal graphic reading “sunk cost fallacy”"></p>
<p>(credit: <a href="https://x.com/darshan/status/1859645719331864786">https://x.com/darshan/status/1859645719331864786</a>)</p>
<p>If it&#39;s time to move on, it&#39;s time to move on, though.</p>
<p>The trick to moving on is to apply that same framework. Pick a good iterative next step. In our example, it could be</p>
<ol>
<li><p>Implementing an ORM to not rely on the Supabase client framework anymore.</p>
</li>
<li><p>Move migrations into ORM to not rely on Supabase</p>
</li>
<li><p>... slowly cutting all ties</p>
</li>
<li><p>Migrate your DB to somewhere else.</p>
</li>
</ol>
<p>Again, this is a case-by-case topic and might not apply to larger corporations with critical infrastructure, but it is the best option for startups.</p>
]]></content:encoded>
    </item>
    <item>
      <title>The Good Enough Mindset</title>
      <link>https://www.learnedlate.com/writing/the-good-enough-mindset</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/the-good-enough-mindset</guid>
      <pubDate>Sun, 23 Feb 2025 00:00:00 GMT</pubDate>
      <description>I'm back. Sorry for the long wait. I've had some cool building to do at Forgd.com, but I want to get back into the habit of writing.</description>
      <content:encoded><![CDATA[<p>I&#39;m back. Sorry for the long wait. I&#39;ve had some cool building to do at <a href="https://www.forgd.com/">Forgd.com</a>, but I want to get back into the habit of writing.</p>
<p>I&#39;ve learned something over the years that has helped me build stuff quickly. This mainly applies to software, but I&#39;m sure it works in many other areas, too.</p>
<p><strong>I call it the good enough mindset.</strong></p>
<p>It&#39;s about finding a functional solution to a problem without chasing perfection.</p>
<p><img src="https://www.learnedlate.com/images/writing/the-good-enough-mindset/1.webp" alt=""></p>
<p>It&#39;s a compromise, of course, as you can&#39;t have your cake and eat it too. You won&#39;t get a perfect solution (not just yet), but you will get a good working solution much faster and cheaper.</p>
<p>This approach is useful when working on software with budget limitations and time constraints.</p>
<p>Like in any startup, when a feature was needed yesterday.</p>
<p><img src="https://www.learnedlate.com/images/writing/the-good-enough-mindset/2.webp" alt="good enough.png"></p>
<p>Perhaps this is just something that only perfectionists need to understand, but it has come in handy for me time and again.</p>
<p>Think of it like this. You identify a problem you want to solve and intuitively aim for the perfect solution.</p>
<p>E.g., the API needs to be fully dynamic.</p>
<p>That is not only overwhelming and likely to deter you from starting but also the most time-consuming and expensive alternative.</p>
<p>A common approach is to break down a problem into smaller, more manageable chunks that can be solved.</p>
<p>I&#39;m thinking of that sort of thing here. Take a step back and consider what a good solution could look like. If a piece of the app can be static, don&#39;t go and build the fully dynamic end stage, make it static instead.</p>
<p>When building software for startups, this mindset helps keep the goal in mind: getting a nice feature out to a customer as soon as possible.</p>
<p>I don&#39;t disregard the perfect solution; I find a compromise that allows for a much faster delivery. Perfect can come later.</p>
<p><img src="https://www.learnedlate.com/images/writing/the-good-enough-mindset/3.webp" alt="Pasted image 20250222205958.png"></p>
<p>Anyone who works in software has seen this, and at this point, you might be rolling your eyes, saying you&#39;ve just discovered the known again.</p>
<p>There is a difference, though. The MVP approach is more for validating ideas with functional products that are limited in scope so they can be validated faster.</p>
<p>The good enough mindset is a far more granular tactic that can be applied to every little problem. I don&#39;t want to give the wrong impression here, though.</p>
<p>I am not advocating for hacks.</p>
<ul>
<li><p>Good enough does not mean you should cut corners; it&#39;s about building something that works.</p>
</li>
<li><p>Good enough means you get something to work even though the solution might not be perfect.</p>
</li>
<li><p>Keep perfect in mind and slowly iterate towards it during future builds.</p>
</li>
<li><p>The time it takes to perfect is disproportionate to the actual gain. I&#39;m thinking of the Pareto Principle here, where 20% of the effort gets you to 80% of the solution, but the remaining 20% requires 80% of the effort (i.e., it&#39;s often not worth it.)</p>
</li>
</ul>
<p><img src="https://www.learnedlate.com/images/writing/the-good-enough-mindset/4.webp" alt="good_enoug_effort.png"></p>
<ul>
<li><p>That&#39;s why, most of the time, good enough is just a nice sweet spot. It gets the job done.</p>
</li>
<li><p>This tactic doesn&#39;t apply to every situation; some cases will require perfection, but it often helps to keep this in mind.</p>
</li>
</ul>
<p>But tech debt. Yeah, I hear you. If you want to build fast and cheap, you&#39;ll have to live with some tech debt. There are ways to mitigate this, but I&#39;ll leave that for another time.</p>
]]></content:encoded>
    </item>
    <item>
      <title>How to get what you want in life</title>
      <link>https://www.learnedlate.com/writing/how-to-get-what-you-want-in-life</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/how-to-get-what-you-want-in-life</guid>
      <pubDate>Mon, 06 Nov 2023 00:00:00 GMT</pubDate>
      <description>Surfing led me to a goal of living by the sea, and I've seen how an unconscious long-term goal shapes small decisions. Here's what I took from it.</description>
      <content:encoded><![CDATA[<p><img src="https://www.learnedlate.com/images/writing/how-to-get-what-you-want-in-life/1.webp" alt="Image"></p>
<p>This might sound cheesy, but surfing changed my life.</p>
<p>Why?</p>
<p>I lived in Germany many years ago and convinced a friend to learn surfing. We booked a surf trip to Portugal, and I immediately fell in love and went on many more such trips.</p>
<p>After some time, however, I figured that surfing a couple of weeks a year wasn’t cutting it.</p>
<p>I somewhat unconsciously set this goal to someday live by the sea.</p>
<p>From then on, every little activity was geared towards that goal. I didn’t notice it much initially, but it became clear in hindsight.</p>
<p>I started working for a big international corporation, told them I wanted to live in a different country, seized the first opportunity, and soon found another one in Australia…</p>
<p>I’ve lived by the ocean for five years and can’t imagine returning to anything else.</p>
<h2>Hindsight Bias</h2>
<p>Looking back, I can see many more such events and how they have driven me towards doing something. In most cases, the goals appeared or were set somewhat unconsciously long before they were attainable.</p>
<p>In one case, I thought driving a company car one day would be cool. At the time, I was finishing my apprenticeship and working for a company where this was nearly impossible.</p>
<p>With the bias of hindsight, I can see that my life has been full of these events.</p>
<p>I somewhat unconsciously think of what I want to achieve in five years.</p>
<p>Something I want for my life and deem very important.</p>
<p>Consequently, every little day-to-day activity is geared towards achieving this goal.</p>
<p>This doesn’t happen on a conscious level.</p>
<p>I don’t get up in the morning now and think, ‘I want to live wherever I want and work whenever I want,` so I must do X.</p>
<p>No, it’s more like I orientate it towards that subconscious goal whenever a decision is made.</p>
<h2>Shifting the Goalpost</h2>
<p>When I started writing about Tokenomics, I didn’t do this to start a business. I did it to learn about crypto projects and potentially invest and profit from them (which aligns with the goal).</p>
<p>If my goal had been to be a C-Suite-Exec at SAP one day, I would have done things differently.</p>
<p>What I mean by this is that you keep the goal over time but figure out different ways to get there.</p>
<p>I first thought it would be writing paid articles, then figured freelance consulting would be cool, freelance software dev, or becoming a software business owner.</p>
<p>All of these somehow lead to achieving the goal.</p>
<p>It’s never a straight line. One needs persistence and perseverance to survive setbacks and keep going. But if your goal doesn’t change, you should be able to continue working towards it.</p>
<h2>New Goals</h2>
<p>When I arrived in Australia, lived by the sea, and surfed daily, I knew I had achieved my goal.</p>
<p>What next? I wasn’t sure. I somehow fell into this hole. Not in a negative way, but I just enjoyed myself and didn’t immediately have a new goal. After some time, however, I came up with something new.</p>
<p>You can do this more systematically to avoid falling into this hole. A thing I’ve read about is journaling about your long-term life goals once in a while.</p>
<p>I don’t do it because I somehow like how things have been going so far, and maybe my mind is very driven, and I don’t need it, but it might be helpful for others.</p>
<h2>This might not be news to you.</h2>
<p>You might already know this, but this was a cool revelation for me. You can achieve a goal over time by simply wanting it and working hard. I bet many of you will have similar memories of setting goals and achieving them.</p>
<p>IF NOT, you should try it. Some people recommend to write them down. You could write down your 5-year, 10-year life goal? This can be very broad. The important part is to think about and manifest this idea of where you want to be. In most cases, this will be very abstract, such as ‘live wherever I want, work whenever I want.’</p>
<p>As always, I’m certainly not the first to discover this. <strong>Brian Tracy</strong>, Zig Ziglar, Tim Ferriss, <strong>Napoleon Hill</strong>, etc., have written books about this.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Towns with surf &gt; towns with no surf!</title>
      <link>https://www.learnedlate.com/writing/towns-with-surf-towns-with-no-surf</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/towns-with-surf-towns-with-no-surf</guid>
      <pubDate>Fri, 20 Oct 2023 00:00:00 GMT</pubDate>
      <description>As an avid surfer, I have learned one thing. Places where you can surf are often nicer than the ones where you can’t. I am most certainly biased, but my wife…</description>
      <content:encoded><![CDATA[<p><img src="https://www.learnedlate.com/images/writing/towns-with-surf-towns-with-no-surf/1.webp" alt=""></p>
<p>As an avid surfer, I have learned one thing. Places where you can surf are often nicer than the ones where you can’t. I am most certainly biased, but my wife - not a surfer - agrees.</p>
<h2>Why are places that have good waves nicer than those that don’t?</h2>
<p>I’m thinking about places such as Byron Bay in Australia, Nazare in Portugal, or Canggu in Bali. Why are they nice, and have higher real estate prices than towns in northern Queensland or the north of Bali?</p>
<p>Compare Byron Bay to Mackay, Nazare to some towns on Portugals’ south coast, and Canggu to places in Balis` north.</p>
<p>A more general theme of this can be seen in many other cities. A shanty part of town is turned into a nice place. How? Creatives, hippies, and artists move in and with some time and love develop a culture, and turn the neighborhood into a cool place. This in turn then gets more normal people to go there and ultimately move there.</p>
<p>There is a scientific-sounding name for it. Gentrification.</p>
<h2>Surfers as Gentrifiers?</h2>
<p>Surfers might be a bit like those hippies. They go somewhere where there are good waves and camp out on the beach just to surf. When word spreads that there are good waves, more people arrive, creating more demand for accommodation, restaurants, etc. As the town gets nicer, more people arrive and the circle continues until prices skyrocket.</p>
<p>The fact that a recreational activity such as surfing is close by might alone increase the standard of living. This is probably not unique to surfing. Just have a look at towns where you can ski, mountain bike, and snowboard.</p>
<p>All in all, whenever we go to a place that has good waves, we like the place a lot more. This has spread from San Diego to Nicoya, Taiwan, Bali, France, Mexico, Bali, and of course Australia.</p>
<p>I wish there was a REIT for this.</p>
<p>Written from Point Plomer, Australia, where any old mate will tell you how empty this place was 40 years ago!</p>
<p><img src="https://www.learnedlate.com/images/writing/towns-with-surf-towns-with-no-surf/2.webp" alt=""></p>
]]></content:encoded>
    </item>
    <item>
      <title>Sounding Board</title>
      <link>https://www.learnedlate.com/writing/sounding-board</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/sounding-board</guid>
      <pubDate>Fri, 29 Sep 2023 00:00:00 GMT</pubDate>
      <description>I got through my first big negotiation with help from an expert friend. I wonder if there should be a place to book people like that for specific situations.</description>
      <content:encoded><![CDATA[<p>Have you ever been through one of these challenging phases in life where you have almost no experience? Passing through uncharted territory?</p>
<p><img src="https://www.learnedlate.com/images/writing/sounding-board/1.webp" alt="Aerial view of a dense green pine forest"></p>
<p>I’ve recently gone through an important negotiation. Something I’ve never done before.</p>
<p>Throughout our lives, we learn by making mistakes. You do something new, you fail and eventually improve to make it work. You learn.</p>
<p>This is a great process, but sometimes in life you just don’t want to take chances. You want to avoid failing as much as possible.</p>
<p>Ideally, you learn from the mistakes of others.</p>
<h2>Learning from others’ mistakes</h2>
<p>The most basic way is learning by reading a book. I bet there are a ton of great books on improving your negotiation game, but it also takes a lot of time.</p>
<p>I am more of a practical learner, meaning I need to apply learned concepts immediately to not forget about them.</p>
<p>The best approach for me is to dive in and learn while I’m solving a problem. This works great when I’m developing software. It has helped me to learn things like Python.</p>
<p><img src="https://www.learnedlate.com/images/writing/sounding-board/2.webp" alt="chess pieces on board"></p>
<p>A negotiation however is more real-time and you often don’t get second chances. Once you’ve made a chess move, it’s hard to reverse.</p>
<p>I find it best to have someone to bounce ideas off of, strategise with and talk through your options and decision tree.</p>
<p>Ideally, someone who has been in this situation before.</p>
<h2>Asking an expert</h2>
<p>Luckily I have a good friend who is an absolute machine when it comes to negotiation.</p>
<p>He works in sales, understands relationships loves to strategise and has certainly run into a bunch of errors and learned from them.</p>
<p>I could have hired a consultant, but all I needed was someone to bounce ideas off of. Someone to talk to once in a while when crafting a response or preparing a meeting.</p>
<p>Whenever I moved along in my negotiation process, I would call him up, get his advice, discuss the pros and cons or just get help rephrasing certain parts of what I was writing.</p>
<p>These conversations added a great deal of value to my process. It would be questions such as how to get the other side to make the first offer, how to push for more and still achieve a win-win and a lot of nuances in the communication itself.</p>
<p>Without the help, I probably wouldn’t have achieved the same result.</p>
<p>This makes me think then: Why don’t I apply this to other areas in life?</p>
<h2>Where else could this be useful?</h2>
<p>Where else could I use an absolute expert as a sounding board and get advice?</p>
<p>I’ve lived in four different countries, and have learned a lot on the way. I’ve also made a bunch of mistakes.</p>
<p>I once had to withdraw cash with my credit card and pay it into my new bank account - paying horrendous fees. I bet someone could have told me about Wise and Interactive Brokers.</p>
<p>I’m terrible at marketing and don’t even know where to start. I’ve built software and have some experience on what to use when, but sometimes it would be beneficial to just talk to an absolute pro for just a bit on how to avoid pitfalls.</p>
<h2>Everyone is an expert at something.</h2>
<p>I’ve made mistakes in my life and have learned from them and most of us will have.</p>
<p>I wonder if there is a place where I can find people who have a ton of experience in a specific topic and then connect with them to learn, navigating me through a tricky situation in life. Helping me understand the uncharted territory in front of me.</p>
<p>This doesn&#39;t have to be a complete mentorship setup where you commit to learning from a person for a while. I’m thinking of a situation-based thing. Let’s say I want to buy a very specific car or want to move to a different country, Maybe I’m thinking about starting a business and can’t decide which tech stack to build on.</p>
<p>I’d then love to scroll through a list of people, check their backgrounds and expertise and book some time to chat.</p>
<p>What do you think? Would you find such a platform useful?</p>
]]></content:encoded>
    </item>
    <item>
      <title>Doing stuff we did 20k years ago</title>
      <link>https://www.learnedlate.com/writing/doing-stuff-we-did-20k-years-ago</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/doing-stuff-we-did-20k-years-ago</guid>
      <pubDate>Mon, 18 Sep 2023 00:00:00 GMT</pubDate>
      <description>I started a habit of running. For the last two months, I’ve been running twice a week.</description>
      <content:encoded><![CDATA[<p>I started a habit of running. For the last two months, I’ve been running twice a week.</p>
<p>The thing is, I hated running. I started doing it for 30 minutes and would just run on the road. I still hated it.</p>
<p>Then I tried heading out on a trail.</p>
<p>I’m not sure what it was, the green environment, the constant challenge of navigating rocks, roots and the winding trail or the fact that I couldn’t see the final destination and thus focus more on the actual moment.</p>
<p>No idea, but now I really enjoy running.</p>
<p><img src="https://www.learnedlate.com/images/writing/doing-stuff-we-did-20k-years-ago/1.webp" alt=""></p>
<h2>What makes running on a trail so much better?</h2>
<p>Why do I feel more alive, why does it feel less boring, why does time fly by when I’m running on a trail rather than on a road?</p>
<p>I think it has to do with our past.</p>
<p>It’s this idea that somehow our bodies and brains are still pretty much what they used to be 10,000 years ago, but everything else has changed.</p>
<p>We can now binge-watch Netflix and spend a whole day inside, fill up on calories by eating processed junk food or lose weight by running on a treadmill indoors.</p>
<p>Great achievements of civilisation, but do they make you feel good? I feel much better after spending the whole day outside. I am full of energy when eating a meal cooked from raw ingredients and now enjoy running - when on a trail.</p>
<p>Our bodies must still be looking out for nutrients, sunlight and the thrill of running through the wild. Maybe that’s what our bodies are programmed to do.</p>
<p>I think this is why to me, running on dull concrete feels like a chore, but running on a trail feels great.</p>
<h2>What else feels better when done the way our forefathers did it?</h2>
<p>I’m not sure when this idea first clicked with me, but since then I’ve been thinking about stuff from this perspective. Here are a few things I’ve come to realise:</p>
<ol>
<li><p>I feel like shit when using my phone/computer all day.</p>
</li>
<li><p>I sleep much better if I’ve spent the day outside vs. inside.</p>
</li>
<li><p>Problems mysteriously solve themselves if I move about, walk around and most importantly have no distractions.</p>
</li>
<li><p>Getting out into the sun right when I wake up, is not the same as coffee, but has a similar effect.</p>
</li>
<li><p>Not moving and sitting all day long is the perfect recipe for back pain for all of us working in front of computers.</p>
</li>
<li><p>Not eating the first thing I get up, gives me a lot more energy.</p>
</li>
<li><p>Walking barefoot or in barefoot shoes seems to help with foot and knee-related issues.</p>
</li>
</ol>
<p>Additionally, I’ve been picking up this concept in all sorts of books.</p>
<p><em><strong>A Hunter-Gatherers Guide to the 21st Century,</strong></em> is a complete book on the topic.</p>
<p><em><strong>Civilised to Death,</strong></em> covers interesting aspects such as happiness, well-being and quality of life since civilisation started.</p>
<p><em><strong>Eat Like a Human,</strong></em> talks about the better nutrition in the food of our ancestors.</p>
<p><em><strong>Jaws,</strong></em> dives deep into why processed food causes a lot of dental issues such as crooked teeth.</p>
<p>and <em><strong>Breathe</strong></em> dives deeper expanding on processed food causing breathing issues.</p>
<h2>Why am I telling you this?</h2>
<p>Not all of this might be 100% applicable or proven. I’m not advocating living like a pre-historic nomad, but instead, keeping these things in mind and perhaps applying bits and pieces.</p>
<p>Keep in mind that our body hasn’t changed much in all these years, but everything else has. The way we move, the way we work, the way we eat etc.</p>
<p>It has helped me a great deal to apply this common sense to all sorts of life situations. Whenever I encounter something new, I ask myself how would we have done this 10,000 years ago.</p>
<p>More often than not, the answer is a pretty decent one.</p>
<p>But keep in mind that balance is important.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Expense Sorted: version 1 available</title>
      <link>https://www.learnedlate.com/writing/expense-sorted-version-1-available</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/expense-sorted-version-1-available</guid>
      <pubDate>Tue, 12 Sep 2023 00:00:00 GMT</pubDate>
      <description>You think you have built something truly unique until you show it to the first potential user.</description>
      <content:encoded><![CDATA[<p>You think you have built something truly unique until you show it to the first potential user.</p>
<p>Often, reality hits and you realise that the usability is crap and that you haven’t documented stuff well enough for someone new to the app to use it.</p>
<p>Well, this is what my wife did. It’s our joint expenses and she has gone through our old process a few times - naturally, she&#39;s a good fit for trying out the new tool.</p>
<p>Guess what, she didn’t find it very intuitive.</p>
<p>Here is what I changed.</p>
<h2>The prototype evolving</h2>
<p>I’ve improved the documentation to make it clear, what one needs to go through to use the tool.</p>
<p><img src="https://www.learnedlate.com/images/writing/expense-sorted-version-1-available/1.webp" alt=""></p>
<p>While the whole tool ideally should still be used with the Fuck You Money sheet, I have beefed up the configuration. This means you can tweak how the sheet looks like.</p>
<p><img src="https://www.learnedlate.com/images/writing/expense-sorted-version-1-available/2.webp" alt=""></p>
<p>Same for the categorisation part:</p>
<p><img src="https://www.learnedlate.com/images/writing/expense-sorted-version-1-available/3.webp" alt=""></p>
<p>Generally, I’ve also improved the status updates and error handling for users to improve usability.</p>
<p>Beginning of September I used the new tool to do our monthly expenses and it worked quite well.</p>
<p>Head to <a href="https://www.expensesorted.com/demo">https://www.expensesorted.com/demo</a> if you want to try it out.</p>
<h2>What’s next?</h2>
<p>Not much really. It works fine for me. I’ve already gone above and beyond what I need just for myself.</p>
<p>From here I’ll go on and promote it a little bit, and see if I can get feedback from some users.</p>
<p>If anyone is interested in using it, I might go on and update it - <strong>would love to hear what you think!</strong></p>
<p>For now, I’ve also paused the whole Google Sheet add-on thing as the current flow via the web app is a lot easier to maintain for me.</p>
]]></content:encoded>
    </item>
    <item>
      <title>No Code Python: Analyse data without knowing how to code</title>
      <link>https://www.learnedlate.com/writing/no-code-python-analyse-data-without</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/no-code-python-analyse-data-without</guid>
      <pubDate>Tue, 05 Sep 2023 00:00:00 GMT</pubDate>
      <description>I’m terrible at developing Python. But it’s this great programming language if you need to mess around with data.</description>
      <content:encoded><![CDATA[<p>I’m terrible at developing Python. But it’s this great programming language if you need to mess around with data.</p>
<p>Say you have been tracking your expenses over the last 5 years but have used a weird format in different sheets and now want to merge them all into one to filter, search, and do whatever else.</p>
<p>Well, look no more.</p>
<p>Python has got you covered.</p>
<p>Do you have no idea how to do Python?</p>
<p>Doesn’t matter.</p>
<p>ChatGPT will do it for you. Just tell it what you want it to do.</p>
<p><img src="https://www.learnedlate.com/images/writing/no-code-python-analyse-data-without/1.webp" alt=""></p>
<p>The answer is a detailed breakdown of steps you need to follow to get started. Admittedly, not everyone will immediately know what <em><strong>pip</strong></em> is but don’t be shy, just ask.</p>
<p>This way, you can easily get an environment set up.</p>
<p><img src="https://www.learnedlate.com/images/writing/no-code-python-analyse-data-without/2.webp" alt=""></p>
<p>The prompt above only breaks down the small part of getting access to my Google Sheet data. But it takes you through everything you need to do (i.e. copy &amp; paste and press run)</p>
<h2>Python Notebook + GPT = ❤️</h2>
<p>Python has a ton of great extensions in its ecosystem. The <a href="https://ipython.org/notebook.html">Jupyter Notebook</a> is one of them. You can set it up in your favourite development environment such as VS Code (or Cursor - details below) and run little bits of Python code, piece by piece.</p>
<p>This is an excellent way of learning and processing the info you get from GPT in small chunks.</p>
<p>Here I’m reading a CSV file, sorting the debit column in ascending order.</p>
<p><img src="https://www.learnedlate.com/images/writing/no-code-python-analyse-data-without/3.webp" alt=""></p>
<p>This notebook is perfectly suited to generate little prompts, try them out, check the results and repeat until you have your desired result.</p>
<p>You could probably do a bunch of these things using Zapier and other automation solutions, but with Python, you almost have no limits.</p>
<h2>Taking it even further</h2>
<p>Since GPT came around, I’ve been mostly using VS Code, copying code over to Chat GPT, letting it help me code, and copying it back to test.</p>
<p>Recently, however, I’ve come across <a href="https://cursor.so/">Cursor.so</a> and it blew my mind. They have taken VS Code as a foundation and embedded GPT deep into its functionality. Here you can do stuff like this:</p>
<p><img src="https://www.learnedlate.com/images/writing/no-code-python-analyse-data-without/4.webp" alt=""></p>
<p>With a few basics on setting up an environment, I don’t think people need to be able to code.</p>
<p>You obviously won’t be able to code any complex apps without any knowledge, but I think Python and in particular Jupyter Notebooks, are quite easy to use with this approach.</p>
<p>It gives people who can’t code, access to the power of coding languages such as Python, just by giving instructions on what to build.</p>
<p>And it makes people who can code even better, faster and generally more productive.</p>
]]></content:encoded>
    </item>
    <item>
      <title>A webApp that categorises your expenses</title>
      <link>https://www.learnedlate.com/writing/a-webapp-that-categorises-your-expenses</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/a-webapp-that-categorises-your-expenses</guid>
      <pubDate>Tue, 29 Aug 2023 00:00:00 GMT</pubDate>
      <description>In my lost post of this series, I walked through my prototype of an expense categorisation add-on for Google Sheets.</description>
      <content:encoded><![CDATA[<p><a href="https://www.learnedlate.com/writing/a-google-sheet-addon-that-classifies">In my lost post of this series</a>, I walked through my prototype of an expense categorisation add-on for Google Sheets.</p>
<p>Unfortunately, Google has been kicking the can down the road and has not yet approved the app. The reason is an OAuth scope - one of these things an app would request from you - is too broad.</p>
<p><img src="https://www.learnedlate.com/images/writing/a-webapp-that-categorises-your-expenses/1.webp" alt=""></p>
<p>I need the scope however to access API keys. Since then I’ve spoken to a friend at Google who suggested to rearchitect the solution to get around the issue. Maybe this will lead to both a web app and a Google Sheet add-on version.</p>
<h2>Next iteration</h2>
<p>Anyway, I didn’t want to wait for Google and also didn’t like the <a href="https://tidisventures.com/blog/a-complete-guide-to-publishing-a-google-workspace-add-on-google-app-script">process of developing and getting an app approved</a>. Maybe it isn’t that bad to not be as dependent on Google.</p>
<p><img src="https://www.learnedlate.com/images/writing/a-webapp-that-categorises-your-expenses/2.webp" alt=""></p>
<p>Inspired by the Google Sheet integration I built for Tokenomics Hub, I pulled out <a href="https://www.learnedlate.com/writing/building-an-expense-classification">this old NextJS version</a> of the app.</p>
<p><img src="https://www.learnedlate.com/images/writing/a-webapp-that-categorises-your-expenses/3.webp" alt=""></p>
<p>The main change to the Google Sheet add-on is that this web version acts as the interface to your sheet. It will trigger the process that reads your expense data and lets you do the configuration of which sheet, range etc. you want to use for training and categorisation.</p>
<p>Everything else is done by the backend. This is the major change.</p>
<p>Whereas the Google Sheet app would interact with Replicate and the sheet directly, for this web app version I’ve moved everything into the backend component.</p>
<p><img src="https://www.learnedlate.com/images/writing/a-webapp-that-categorises-your-expenses/4.webp" alt=""></p>
<p>If you’re super keen to try it out, I’ve got a very early prototype working at <a href="https://www.expensesorted.com/demo">Expense Sorted</a>.</p>
<p>If you follow the steps and use the template, it should work smoothly.</p>
<h2>Next Steps</h2>
<p>My initial goal was to solve this problem for myself and I think I’ve already gone past that now in making it available for others.</p>
<p>It won’t take much to turn this into a fully working MVP from here. I need:</p>
<ol>
<li><p>Authorisation and user management - Auth0 looks promising.</p>
</li>
<li><p>Improved status handling: the current prototype doesn’t even tell the user when the training is done - for that, I need a DB and might try out Supabase.</p>
</li>
<li><p>Payments processing: I’m paying for Replicate, so I need to pass this on. It won’t be much, but Stripe is probably the way to go.</p>
</li>
</ol>
]]></content:encoded>
    </item>
    <item>
      <title>Me improving SEO</title>
      <link>https://www.learnedlate.com/writing/me-improving-seo</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/me-improving-seo</guid>
      <pubDate>Tue, 22 Aug 2023 00:00:00 GMT</pubDate>
      <description>I find it a lot easier to learn from someone who is not an expert. Someone who has gone through a similar learning process as I have.</description>
      <content:encoded><![CDATA[<p>I find it a lot easier to learn from someone who is not an expert. Someone who has gone through a similar learning process as I have.</p>
<p>So don’t take this as advice from an absolute SEO pro, but more as something a fellow learner found out.</p>
<p>SEO and marketing is something I’ve never really paid attention to or cared about. Learning for me often works in a way that I’m not interested in a topic, then I completely ignore it, next, a while later I coincidentally stumble across the topic and dive in.</p>
<p>It happened when I started reading about this fellow <a href="https://twitter.com/ffstrauf/status/1691229628151615489">here</a>:</p>
<p><img src="https://www.learnedlate.com/images/writing/me-improving-seo/1.webp" alt=""></p>
<p>What inspired me was that the guy posted a thread starting with the technical side of building something. I’m familiar with this. Then he went on to get into marketing what he had created.</p>
<p>Cool, if he can do this, I can give it a shot too.</p>
<h2>Improving Expense Sorted’s SEO</h2>
<p>It inspired me enough to apply a few of the things to my expense categorisation app.</p>
<p>From a non-marketing guy, here is what I did.</p>
<h3>Find Keywords</h3>
<p>I looked up keywords on <a href="https://ahrefs.com/keyword-generator">ahref</a> and picked those that have KD &lt; 15 and a larger number of clicks.</p>
<blockquote>
<p>Keyword Difficulty (KD) gives an estimation of how hard it is to rank in the top 10 organic search results for a keyword on a 100-point scale</p>
</blockquote>
<p>Volume is how often the keyword has been searched for (i.e. higher is better).</p>
<p><img src="https://www.learnedlate.com/images/writing/me-improving-seo/2.webp" alt=""></p>
<h3>Generate Pages</h3>
<p>Next, I got GPT to generate the content. Not only the content but also the full NextJS page:</p>
<p><img src="https://www.learnedlate.com/images/writing/me-improving-seo/3.webp" alt=""></p>
<p>Here’s the code:</p>
<p><img src="https://www.learnedlate.com/images/writing/me-improving-seo/4.webp" alt=""></p>
<p>Leading to this:</p>
<p><img src="https://www.learnedlate.com/images/writing/me-improving-seo/5.webp" alt=""></p>
<h3>Beefing up the front page</h3>
<p>Additionally, I linked all these pages on the front page and created an FAQ and a testimonial section. All of this took less than 30 minutes and hopefully helps my site to get found.</p>
<p><img src="https://www.learnedlate.com/images/writing/me-improving-seo/6.webp" alt=""></p>
<h2>Other things that hopefully contribute</h2>
<ul>
<li><p>I use NextJS and generate mostly static sites as they deliver great performance. NextJS also does most of the <a href="https://nextjs.org/docs/app/building-your-application/optimizing/metadata">metadata legwork for you</a>.</p>
</li>
<li><p>Using descriptive URLs, such as: /<strong>use-cases/bank-transaction-classification</strong></p>
</li>
<li><p>I also got a proper domain <a href="https://www.expensesorted.com/">https://www.expensesorted.com/</a> and added it to Google Search Console.</p>
</li>
<li><p>I created a <a href="https://www.npmjs.com/package/next-sitemap">sitemap</a> and uploaded it to the search console.</p>
</li>
</ul>
<h2>What I plan to do next.</h2>
<p>I’m still waiting for Google to approve and publish the actual app, so currently, this is all just sitting there and can’t be used.</p>
<p>Once it’s available I want to promote it on the Hackernews show and tell channel, the side-project subreddit and producthunt.</p>
<p>I’ll keep you posted on how all of that goes.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Learning by cheating</title>
      <link>https://www.learnedlate.com/writing/learning-by-cheating</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/learning-by-cheating</guid>
      <pubDate>Mon, 14 Aug 2023 00:00:00 GMT</pubDate>
      <description>Did you know that when negotiating, you always try to let the other side make the first offer? It’s obvious, makes intuitive sense and still, I didn’t apply it.</description>
      <content:encoded><![CDATA[<p>Did you know that when negotiating, you always try to let the other side make the first offer? It’s obvious, makes intuitive sense and still, I didn’t apply it.</p>
<p>It’s one of these things that you might learn before having the ability to apply it.</p>
<p>What I mean is, there were a bunch of things, theoretical concepts, they taught me in school. And then once I got to apply them to a real-life situation, mostly many years later, I had completely forgotten them.</p>
<p>It’s only if you are reminded of it at the very moment you can apply it.</p>
<h3>A gap between theory and practice</h3>
<p>The good thing: often once you have applied it the first time, it sticks with you. I now try to always let the other side make the first offer when negotiating.</p>
<p>It’s burned into my brain. I guess our brain filters useful activities and only really saves the stuff that we have been able to use. Why store all these theories that we might never need?</p>
<p>There are many such examples that once you have applied to a real-life situation, become a normal part of your repertoire of skills. You&#39;re doing a sales call with a potential client and can’t stop talking about how great the product is. How about listening to the client instead and asking questions about the problem he is having?</p>
<p>Cooking has similar impacts. You can read cookbooks as much as you want, but you’ll only figure out how to cook a meal if you go and do it. Then you might read about this amazing new technique on how to make scrambled eggs, but if you don’t quickly apply it, it’s lost.</p>
<p>Or surfing. Just check out this guy to get a feel for how well surf-coaching theory might work.</p>
<iframe src="https://www.youtube-nocookie.com/embed/Vnbt0RpWbyQ" width="728" height="409" title="YouTube video" loading="lazy" allowfullscreen></iframe>

<p>Theory without the ability to apply it seems like such an inefficient way of learning and going about life.</p>
<p>What if you could just find out what the most important things about a specific new situation are and then immediately try them out? Seems better than reading a bunch of books or studying the field extensively, loading your brain with theories you don’t need.</p>
<h3>Just-In-Time-Learning</h3>
<p><a href="https://chat.openai.com/share/d7235eb7-3246-4b04-88ec-047f8d70264b">In a recent conversation with ChatGPT</a>, I learned something new:</p>
<blockquote>
<p>Just-in-Time Learning is a strategy that focuses on learning material exactly when you need it, rather than trying to learn everything about a subject up front. The concept derives from &quot;Just-in-Time Manufacturing&quot;, a methodology aimed at reducing flow times within production systems.</p>
</blockquote>
<p>Back in 2005 when I started as a software developer, I remember using one of these amazing command references or cheat sheets as we called it:</p>
<p><img src="https://www.learnedlate.com/images/writing/learning-by-cheating/1.webp" alt="File:Unix command cheatsheet.pdf - Wikimedia Commons"></p>
<p>Reflecting, I think cheat sheets apply the Just-In-Time-Learning concept perfectly.</p>
<p>Nobody tells you to memorize the whole thing. You print it out and leave it next to your computer until you needed it.</p>
<p>Over time, you memorise the most relevant things and eventually don’t need the cheat sheet any more.</p>
<h2>Cheat Sheets</h2>
<p>I’m wondering if this could be applied to other areas of life. Other new situations that you are facing.</p>
<p>Running Tokenomics DAO, I have a bunch of customer conversations and thought I could benefit from reading <em>The Mom Test by Rob Fitzpatrick</em>.</p>
<p>While reading, it makes a ton of sense, but I know that once I’m done and get to my first customer conversations, I will have lost most of the knowledge.</p>
<p>So obviously I did the most natural thing to do nowadays:</p>
<p><img src="https://www.learnedlate.com/images/writing/learning-by-cheating/2.webp" alt=""></p>
<p>Here’s what it came up with. Doesn’t look half bad, does it?</p>
<p><img src="https://www.learnedlate.com/images/writing/learning-by-cheating/3.webp" alt=""></p>
<p>Could use a bit of styling for sure, but I think I’ll pull this out next time I’m talking to a customer.</p>
<p>Not everyone will have the same learning style. Some might be perfectly fine reading through a textbook and applying it months later.</p>
<p>But for people like me, who completely fail at this task, a cheat sheet could be quite useful.</p>
<p>With today’s technology, it could be really easy to just generate a cheat sheet for whatever new thing you&#39;re trying to do. Negotiating, talking to customers, cooking an omelette - just surfing will be a bit tricky.</p>
<p>I’d be interested in hearing how others have approached this topic. I guess I’ll be sharing a few cheat sheets in the future.</p>
]]></content:encoded>
    </item>
    <item>
      <title>A Google Sheet Addon that classifies your expenses</title>
      <link>https://www.learnedlate.com/writing/a-google-sheet-addon-that-classifies</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/a-google-sheet-addon-that-classifies</guid>
      <pubDate>Fri, 04 Aug 2023 00:00:00 GMT</pubDate>
      <description>I wanted a Google Sheet add-on that classifies my expenses. This covers how a sentence transformer matches new expenses to old ones, and the open problems.</description>
      <content:encoded><![CDATA[<p><a href="https://www.learnedlate.com/writing">In my last post</a> on this series, I ended up wanting to explore Google Sheets as an add-on. Kind of like <a href="https://www.tillerhq.com/">Tiller</a> lets you integrate into your bank account.</p>
<p>If you’re starting, here is a summary:</p>
<p><img src="https://www.learnedlate.com/images/writing/a-google-sheet-addon-that-classifies/1.webp" alt="Spreadsheet of bank and credit card transactions with colour-coded category cells and a red arrow"></p>
<blockquote>
<p>Every month I export a bunch of transactions from credit card/bank accounts and want to know which category they fall into. I’m really happy with my <a href="https://fstrauf.gumroad.com/l/fuck-you-money-spreadsheet">current process</a>. It’s rules-based, meaning that I’ll define something like *Coles* = Groceries i.e. if it finds Coles in the description, it sets the category to groceries.</p>
<p>The problem. Well, if it’s your first time at KMART, you’ll have to set up a new rule.</p>
<p>Sounds like AI could help, so I started using some language models and built this custom app (<a href="https://www.learnedlate.com/writing/building-an-expense-classification">details here</a>).</p>
</blockquote>
<h2>The basics</h2>
<p>The basic process is important to understand. You train your old expenses and use them as a reference for new expenses. If there’s a match, assign the category of old to new. Simple, right?</p>
<p><img src="https://www.learnedlate.com/images/writing/a-google-sheet-addon-that-classifies/2.webp" alt="Six-step graphic showing a sentence model matching “ALDI STORES BALGOWLAH” to “ALDI STORES MANLY” and assigning Groceries"></p>
<p>The tricky part is done with a machine learning model. <a href="https://huggingface.co/sentence-transformers">The sentence transformer model</a>. It turns a sentence, such as our expense description, into a numerical format. This is called embedding and allows understanding of the meaning of the sentence.</p>
<p>If you have the meaning of one sentence, you can compare it with the meaning of another sentence. That’s how you match and classify.</p>
<h2>The architecture/dataflow</h2>
<p>I like my <a href="https://fstrauf.gumroad.com/l/fuck-you-money-spreadsheet">Google Sheet</a>s, so naturally, that’s where I start.</p>
<p><a href="https://replicate.com/replicate/all-mpnet-base-v2">Replicate has a sentence transformer model</a> already deployed and ready to use as an API.</p>
<p>A bit of a Python script to handle the data and a Google Storage Bucket to store/retrieve the embedding.</p>
<p><img src="https://www.learnedlate.com/images/writing/a-google-sheet-addon-that-classifies/3.webp" alt="Sequence diagram of Google Sheets, Replicate Service, Python Script API and Google Storage for training and classifying expenses"></p>
<p>For the user, there are two steps to this:</p>
<p><strong>The training</strong>, means you send in all of your old, already classified expenses, turn them into embeddings and save them.</p>
<p><strong>The classifying</strong>, where the new expenses are turned into embeddings and the meaning of each is compared with the old expenses stored in the bucket.</p>
<p>Then send the matched data to the sheet once it’s completed. All that needs to be done from here is to get the category from the existing expense.</p>
<h2>My prototype</h2>
<p>The fully working app is in action.</p>
<p><img src="https://www.learnedlate.com/images/writing/a-google-sheet-addon-that-classifies/4.webp" alt="Google Sheet of descriptions and categories behind an empty “Sheet Editor (Tailwind CSS)” dialog"></p>
<p>What is next, is to hook this <a href="https://fstrauf.gumroad.com/l/fuck-you-money-spreadsheet">into my spreadsheet</a>, to ensure I can use it every month. This then hopefully makes my life easier.</p>
<p>Once tested and I have a good flow, I’d like to make this available to others.</p>
<h2>Next Steps</h2>
<p>I’d like to turn this into an extension that people can install into their Google Sheets.</p>
<p>For this, I need to solve a couple of problems around scalability:</p>
<ul>
<li><p>how do I call the API of an individual Google Sheet, to send the data back?</p>
</li>
<li><p>how do I store the embedding data of individuals and protect personal data?</p>
</li>
<li><p>how do I clean the training data and remove as many duplicates as possible (smaller dataset = faster processing time)?</p>
</li>
<li><p>how much will it cost to run this on replicate?</p>
</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Getting into a routine while travelling is hard.</title>
      <link>https://www.learnedlate.com/writing/getting-into-a-routine-while-travelling</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/getting-into-a-routine-while-travelling</guid>
      <pubDate>Mon, 31 Jul 2023 00:00:00 GMT</pubDate>
      <description>Be it to visit family and friends in Germany for a couple of weeks or drive up the coast in our bus for a few months to avoid the Sydney winter.</description>
      <content:encoded><![CDATA[<p>I like travelling.</p>
<p>Be it to visit family and friends in Germany for a couple of weeks or drive up the coast in our bus for a few months to avoid the Sydney winter.</p>
<p><img src="https://www.learnedlate.com/images/writing/getting-into-a-routine-while-travelling/1.webp" alt=""></p>
<p>A fellow traveller recently told me about his struggle to exercise on the road.</p>
<p>I can relate. One day you drive 200kms in the morning, the next you go shopping at lunchtime, some sightseeing in the afternoon. When your schedule isn’t fixed, it’s tough to get into a rhythm and get work done.</p>
<h3>Managing vs. Creating</h3>
<p>Easy is the managerial stuff. Answering emails and discord, scheduling tweets and articles or hopping on a meeting. They don’t usually need a lot of focus and can be fit in between.</p>
<p>But when I need to get creative, it’s much harder. Time is always on my mind. How much do I have left before the next commitment? How do I find a quiet spot where I can focus?</p>
<p>The most important part is getting into the headspace of where you stopped. What exactly was the problem that you were debugging two days ago? Did you figure out why the error occurred? It’s good once you have your mind set on the problem again and ideally then, you have an hour or two to solve it.</p>
<p><img src="https://www.learnedlate.com/images/writing/getting-into-a-routine-while-travelling/2.webp" alt=""></p>
<p>This might not be such a big problem if you’re travelling on your own. I travel with a family, and a three-year-old can be great at tearing you out of that focus zone.</p>
<p>At home, you close the office door, head to your local library or favourite cafe, when travelling this might not always be that easy.</p>
<p>I might not even get into the headspace because I anticipate getting interrupted again.</p>
<p>It’s not just working that takes time to get used to when on the road. Exercising regularly can be an issue when you don’t have your gym close by.</p>
<p>How about having a healthy dinner at the same time every day? A non-negotiable for us.</p>
<h2>What helps</h2>
<p><strong>Getting up before the family</strong> and starting with a habit (get up, shower, make a coffee, check the emails or start coding straight away). This sometimes gives me an hour of focused work and over time builds a routing.</p>
<p><strong>Block out times for creative stuff</strong>. Set aside two hours and try not to let anything disturb you. I head to the camp kitchen or put on noise-cancelling headphones.</p>
<p>Find a nice location such as a cafe or your father-in-law’s office to get into the zone during that time.</p>
<p><strong>Trick your mind with short stuff</strong>. Want to exercise or go for a run? I don’t aim for a daunting 1-hour session (unless I’m surfing of course). Try 20-min. Do that 4 or 5 times and you will easily scale up to more if you enjoyed it.</p>
<p>The same works for writing. Sit down for just 10min and write a few words. Often I find that I do more than I set out to do.</p>
<p><strong>Reading something motivational on the side</strong>. I’m currently reading the minimalist Entrepreneur by Sahil Lavignia and enjoy it. It fits roughly with what I’m doing and gives me lots of little things to think about and work on.</p>
<p>I’m not sure how to find this kind of book. Most important is probably that it has to do with what you are currently doing.</p>
<p><strong>Good food</strong>. It doesn’t need to be expensive, but just make sure you eat stuff that doesn’t make you tired. It’s tempting as travelling can be stressful and it might be tempting to just go for a quick bite at Maccas. Don’t.</p>
<p><strong>Slow down.</strong> What helps us is slowing down. We don’t go to a new place every night. Ideally, we book into a place in some town for a week or two and then move on. When moving on we try to only drive for a little bit before settling down again.</p>
<h2>What works for you?</h2>
<p>I’m keen to learn what you have seen working for you.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Expense Classification. How it started. How it's going.</title>
      <link>https://www.learnedlate.com/writing/expense-classification-how-it-started</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/expense-classification-how-it-started</guid>
      <pubDate>Tue, 25 Jul 2023 00:00:00 GMT</pubDate>
      <description>Yeah, I’m still going down the expense classification rabbit hole. I do it every month, so simplifying the process is a problem I really want to solve.</description>
      <content:encoded><![CDATA[<p>Yeah, I’m still going down the expense classification rabbit hole. I do it every month, so simplifying the process is a problem I really want to solve.</p>
<p>I’ve slightly changed my mind about what I want to build since <a href="https://www.learnedlate.com/writing/building-an-expense-classification">writing my last piece</a>.</p>
<h2>What is it that I’m trying to do?</h2>
<p><img src="https://www.learnedlate.com/images/writing/expense-classification-how-it-started/1.webp" alt=""></p>
<p>Every month I export a bunch of transactions from credit card/bank accounts and want to know which category they fall into. I’m really happy with my <a href="https://fstrauf.gumroad.com/l/fuck-you-money-spreadsheet">current process</a>. It’s rules-based, meaning that I’ll define something like *Coles* = Groceries i.e. if it finds Coles in the description, it sets the category to groceries.</p>
<p>The problem. Well, if it’s your first time at KMART, you’ll have to set up a new rule.</p>
<p>Sounds like AI could help, so I started using some language models and built this custom app (<a href="https://www.learnedlate.com/writing/building-an-expense-classification">details here</a>).</p>
<p><img src="https://www.learnedlate.com/images/writing/expense-classification-how-it-started/2.webp" alt=""></p>
<h2>Upon second thought though</h2>
<p>I figured that these types of custom apps are nothing that I’d want to use.</p>
<p><a href="https://copilot.money/">Copilot</a>, <a href="https://www.rocketmoney.com/">RocketMoney</a>, <a href="https://www.monarchmoney.com/">MonarchMoney</a>, etc. all lock you in. It’s often hard to move to a different service, even harder to import legacy data manually and most of them are just so overwhelming that I feel only an accountant can stomach the amount of numbers.</p>
<p>So if I wouldn’t want to use my own tool, then why build it at all?</p>
<p>What I do like using is a spreadsheet. Ideally, I’d keep the spreadsheet and make my current classification smarter.</p>
<p>Just like <a href="https://www.tillerhq.com/">Tiller</a> allows you to keep a spreadsheet and automatically imports transaction data from your bank and credit card accounts.</p>
<p><img src="https://www.learnedlate.com/images/writing/expense-classification-how-it-started/3.webp" alt=""></p>
<p>It’s a nice little spreadsheet addon that lets you keep what you know - the spreadsheet - and just makes it smarter.</p>
<p><strong>The Problem. They do expense classification exactly the same as I do. Rules-based.</strong></p>
<p>Anyway, the idea that stuck with me was the spreadsheet add-on.</p>
<h2>Building a Google Sheet addon</h2>
<p>I quickly found this great <a href="https://github.com/enuchi/React-Google-Apps-Script/tree/main">repo</a> for a react-based sheets add-on.</p>
<p><img src="https://www.learnedlate.com/images/writing/expense-classification-how-it-started/4.webp" alt=""></p>
<p>This should allow me to call some sort of API/backend service to categorise transactions.</p>
<h2>Transaction classification API</h2>
<p>As always, there is no need to reinvent the wheel. This guy <a href="https://aseifert.com/p/serverless-sentence-transformer/">here</a> did something very similar to what I’m trying to do. I <a href="https://github.com/fstrauf/txClassify/blob/tx_classify_update/server/train/main.py">rewrote</a> my sentence transformer BERT script to run as a Google Cloud Function and got it to work with a small dataset.</p>
<p><img src="https://www.learnedlate.com/images/writing/expense-classification-how-it-started/5.webp" alt=""></p>
<p>The whole function is currently very slow and I had to give it about 2GB of memory to work at all.</p>
<p>Here is what the current setup looks like.</p>
<p><img src="https://www.learnedlate.com/images/writing/expense-classification-how-it-started/6.webp" alt=""></p>
<p>There are still a bunch of problems to be solved, which I’ll hopefully be able to work through soon.</p>
<h2>What’s next?</h2>
<ul>
<li><p>The model is still quite slow, so I’ll have to find out how to speed it up. I found some resources here:</p>
<p><a href="https://magazine.sebastianraschka.com/p/finetuning-llms-with-adapters">Finetuning LLMs Efficiently with Adapters</a> (Ahead of AI)</p>
</li>
<li><p>The part in the architecture that is still missing is the connection between Google Sheet Addon and Google Cloud Function</p>
</li>
<li><p>I also stumbled across <a href="https://replicate.com/creatorrr/all-mpnet-base-v2/api">this interesting model on Replicate</a>, which is a redeployed SentenceTransformer. Going to try this out as well.</p>
</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>AI-Assisted Writing</title>
      <link>https://www.learnedlate.com/writing/ai-assisted-writing</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/ai-assisted-writing</guid>
      <pubDate>Mon, 17 Jul 2023 00:00:00 GMT</pubDate>
      <description>I’m going down this rabbit hole of expense classification at the moment.</description>
      <content:encoded><![CDATA[<p>I’m going down this rabbit hole of expense classification <a href="https://www.learnedlate.com/writing/building-an-expense-classification">at the moment</a>.</p>
<p>It’s one of the things that is really annoying about keeping track of your expenses, but it needs to be done.</p>
<p>The problem is that I can’t find a great solution that just plugs into my current Google sheet.</p>
<p>Anyway, I think there is a problem to be solved but before going any further, I want to test my hypothesis with a tool like <a href="https://www.loopgenius.com/">Loopgenius</a>.</p>
<p><img src="https://www.learnedlate.com/images/writing/ai-assisted-writing/1.webp" alt=""></p>
<p>I’m not an expert on this, but I’ve seen these landing pages before. Pretty much a dummy page, that pretends that you have a product (which you don’t) that lets you collect emails from people that are interested.</p>
<p>Yeah, all of you marketing folks know this, but I had no idea!</p>
<p>So <a href="https://expense-classification-for-google-sheets.loopgenius.com/">here is my landing page</a> for an Expense Classification Tool for Google Sheets:</p>
<p><img src="https://www.learnedlate.com/images/writing/ai-assisted-writing/2.webp" alt=""></p>
<p>On top of a landing page, Loopgenius also helps you to generate content you can use to market your landing page.</p>
<h2>Here is where we get to AI-assisted writing</h2>
<p>The thing that actually blew my mind with this was the thought leadership marketing campaign they generate for you.</p>
<p>Why?</p>
<p>Well, they use AI to ask you really good questions and then use your answers to assemble a marketing article.</p>
<p>Here’s how mine went:</p>
<p><img src="https://www.learnedlate.com/images/writing/ai-assisted-writing/3.webp" alt=""></p>
<p><img src="https://www.learnedlate.com/images/writing/ai-assisted-writing/4.webp" alt=""></p>
<p><img src="https://www.learnedlate.com/images/writing/ai-assisted-writing/5.webp" alt=""></p>
<p>And here is what it came up with:</p>
<blockquote>
<p>Just finished reading an eye-opening article by Florian Strauf (<a href="https://www.learnedlate.com/writing/fuck-you-money-doesnt-mean-you-need">https://www.learnedlate.com/writing/fuck-you-money-doesnt-mean-you-need</a> that completely shifted my perspective on wealth and time.</p>
<p>We often equate wealth with richness, but what if we&#39;ve been looking at it all wrong? What if &quot;fuck you money&quot; isn&#39;t about being rich, but about having a savings account of time? Time that you can take off whenever you want, time that you can invest in yourself, in your dreams, in your life.</p>
<p>This isn&#39;t just about financial freedom, it&#39;s about life freedom. It&#39;s about breaking free from the shackles of the 9-5 grind and the traditional work-retirement model. It&#39;s about taking control of your life and your time, because ultimately, that&#39;s what life is all about.</p>
<p>Yes, it requires discipline and planning. Yes, it&#39;s not easy. But once you&#39;ve tasted the freedom that comes with having a &quot;time savings account&quot;, trust me, you&#39;ll want more.</p>
<p>Imagine what we could achieve if we all started viewing our savings not just as money, but as time. More entrepreneurship, more innovation, more life.</p>
<p>So, let&#39;s start saving time, not just money. Because life is too short to be spent chained to a desk. #TimeIsMoney #FinancialFreedom #LifeFreedom #Entrepreneurship #Innovation #WorkLifeBalance</p>
</blockquote>
<p><strong>Now I think that’s a pretty cool summary.</strong></p>
<p>The part I found most impressive is how it asked me those questions that were somewhat thought-provoking and teased out a new perspective.</p>
<h2>Can ChatGPT do the same?</h2>
<p>TL;DR: YES!</p>
<p><img src="https://www.learnedlate.com/images/writing/ai-assisted-writing/6.webp" alt=""></p>
<p>Ok, here’s a great topic:</p>
<p><img src="https://www.learnedlate.com/images/writing/ai-assisted-writing/7.webp" alt=""></p>
<p>And here are my answers:</p>
<p><img src="https://www.learnedlate.com/images/writing/ai-assisted-writing/8.webp" alt=""></p>
<p>The finished AI-assisted writing article:</p>
<h2>Maximizing Energy: Tips for Eating Without Feeling Tired</h2>
<p>Introduction: In our busy lives, feeling tired after meals can hamper productivity and overall well-being. However, with mindful eating habits and the right food choices, it&#39;s possible to maintain consistent energy levels throughout the day. Let&#39;s explore some insights on how to eat without feeling tired and sluggish.</p>
<ol>
<li><p>Identify Fatigue Triggers: For many individuals, overeating, consuming excessive carbs, and indulging in sugar are common culprits behind post-meal fatigue. Personal experiences often reveal that carbs, particularly gluten, can lead to tiredness. By being aware of these triggers, you can make informed choices to minimize fatigue.</p>
</li>
<li><p>The Impact of Diet Choices: What we eat has a significant impact on our energy levels. Foods high in sugar can cause energy spikes followed by crashes, leaving you feeling drained. To maintain a balanced energy level, it&#39;s crucial to avoid excessive sugar intake throughout the day. Incorporating meat or animal protein into your diet can provide sustained energy for extended periods.</p>
</li>
<li><p>The Power of Red Meat: Red meat, known for its nutrient density, can play a beneficial role in combating post-meal fatigue. When opting for a diet that consists mostly of meat and vegetables, individuals often experience minimal sluggishness or brain fog. However, moderation is key, as excessive consumption of any food group can still lead to fatigue.</p>
</li>
<li><p>Mindful Eating Habits: Implementing mindful eating habits can significantly impact your energy levels. Consider delaying your first meal until around 10 or 11 am and opt for a light protein-based snack to kickstart your day. During lunch, prioritize meals with minimal carbs, and for dinner, indulge in a substantial gluten-free meal with limited carb intake. Save sugar consumption for post-exercise periods to prevent energy crashes.</p>
</li>
<li><p>The Role of Timing: Timing your meals strategically can help maintain a steady energy level. Skipping breakfast can keep your energy levels high in the morning while consuming multiple small meals throughout the day instead of three large ones can aid in digestion and sustained energy release.</p>
</li>
</ol>
<p>Conclusion: Eating without feeling tired is achievable with conscious choices and mindful habits. By identifying fatigue triggers, such as overeating, excessive carbs, and sugar, and adapting your diet accordingly, you can maintain consistent energy levels throughout the day. Incorporating nutrient-dense foods like red meat and embracing mindful eating practices, such as strategic meal timing, can further enhance your energy and overall well-being. Remember, finding the right balance for your unique body and lifestyle is key to enjoying sustained energy and vitality.  </p>
<h2>Closing thoughts</h2>
<p>Every day I’m learning how these new tools can make you better not just at coding and writing but also in the approach you take with it.</p>
<p>Anyway, I thought I’d share this with you and might even post the above as a separate article.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Building an Expense classification app with Python and NextJS</title>
      <link>https://www.learnedlate.com/writing/building-an-expense-classification</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/building-an-expense-classification</guid>
      <pubDate>Thu, 13 Jul 2023 00:00:00 GMT</pubDate>
      <description>I built an expense classification app with Python, Flask and NextJS that matches new bank transactions to old ones using a language model. Code included.</description>
      <content:encoded><![CDATA[<p>In ‘<strong><a href="https://www.learnedlate.com/writing/fuck-you-money-doesnt-mean-you-need">Fuck you money doesn’t mean you need to be rich</a></strong>’, I walked through my thoughts on saving up time and gaining financial independence.</p>
<blockquote>
<p>The point is being aware of the two parameters; savings and expenses and how they impact the free time you have at your disposal.</p>
</blockquote>
<p>Arguably, the key to fuck your money is knowing your expenses. Tracking them, however, is an annoying topic and nobody really wants to spend a lot of time on it.</p>
<p>Most banking apps help, but the data is kind of temporary (they don’t store it forever), non-transferable (change your bank and it’s lost) and often not very customisable (adding expense classes often doesn’t work).</p>
<p>If you’re serious about fuck you money though, you better start taking care. Knowing what you earn and spend is the first step.</p>
<p>I’ve been using a spreadsheet, with rules-based classification for a couple of years now and thought I’d upgrade to something more sophisticated now that AI is all the rage.</p>
<p>The goal is to replace the spreadsheet with something easier, less annoying. In this post, I want to go through one part of this upgrade. The expense classification part. In future posts, I want to add bits and pieces until it becomes a full-blown app to replace the sheet. I’m not going to worry about the end goal just yet, but will start building away.</p>
<p>The architecture is simple. A Python backend using Flask to run within a Vercel Serverless Function. Nextjs and React, then are the front end.</p>
<p><img src="https://www.learnedlate.com/images/writing/building-an-expense-classification/1.webp" alt="Architecture diagram of Vercel with NextJS and React, and a serverless function running Flask Python classification with BERT"></p>
<h2>The App</h2>
<p>True to <a href="https://www.learnedlate.com/writing/how-to-build-a-prototype">How to build a prototype</a>, I’ll start with copy, paste, and adjust. Don’t reinvent the wheel. Vercel has a ton of great templates. I used this <a href="https://vercel.com/templates/next.js/nextjs-flask-starter">Nextjs and Flask starter</a>.</p>
<p>The structure looks like this:</p>
<p><img src="https://www.learnedlate.com/images/writing/building-an-expense-classification/2.webp" alt="VS Code file tree of the txClassify project including UserInput.js and CSV files"></p>
<p>I then added two components &lt;<a href="https://github.com/fstrauf/txClassify/blob/Tutorial_Classify/app/UserInput.js">UserInput</a>&gt; and &lt;<a href="https://github.com/fstrauf/txClassify/blob/main/app/ExpenseTable.js">ExpenseTable</a>&gt; where UserInput will be the main part of the screen.</p>
<pre><code>&quot;use client&quot;;

import { useState } from &quot;react&quot;;
import { Formik, Form } from &quot;formik&quot;;
import ExpenseTable from &quot;./ExpenseTable&quot;;

export default function UserInput() {
  const [initialValues, setInititalValues] = useState({
    filePath: &quot;&quot;,
    expenses: [],
  });

  const handleUpdateClasses = (values) =&gt; {
    if (values) {
      
      const requestBody = values.expenses      

      fetch(&quot;/api/retrain&quot;, {
        method: &quot;POST&quot;,
        body: JSON.stringify(requestBody),
        headers: {
          &quot;Content-Type&quot;: &quot;application/json&quot;,
        },
      })
        .then((response) =&gt; response.json())
        .then((data) =&gt; {
          console.log(&quot;Successfully retrained based on user inputs&quot;);          
        })
        .catch((error) =&gt; {
          console.error(error);
        });
    }

  };

  const handleExportData = (values) =&gt; {
    if (values) {
      const requestBody = values.expenses  
  
      fetch(&quot;/api/convertToCSV&quot;, {
        method: &quot;POST&quot;,
        body: JSON.stringify(requestBody),
        headers: {
          &quot;Content-Type&quot;: &quot;application/json&quot;,
        },
      })
        .then((response) =&gt; response.text())
        .then((csvData) =&gt; {
          const csvFile = new Blob([csvData], { type: &quot;text/csv&quot; });
          const csvURL = URL.createObjectURL(csvFile);
          const downloadLink = document.createElement(&quot;a&quot;);
          downloadLink.href = csvURL;
          downloadLink.download = &quot;exported_data.csv&quot;;
          downloadLink.click();
          URL.revokeObjectURL(csvURL);
          console.log(&quot;CSV file exported successfully&quot;);
        })
        .catch((error) =&gt; {
          console.error(error);
        });
    }
  };
  

  const submitData = async (values, { resetForm, setSubmitting }) =&gt; {
    setSubmitting(true);

    if (values) {
      const formData = new FormData();
      formData.append(&quot;file&quot;, values.filePath);

      fetch(&quot;/api/classify&quot;, {
        method: &quot;POST&quot;,
        body: formData,
      })
        .then((response) =&gt; response.json())
        .then((data) =&gt; {
          setInititalValues({ filePath: values.filePath, expenses: data });
        })
        .catch((error) =&gt; {
          console.error(error);
        });
    }
    setSubmitting(false);
  };

  return (
    &lt;div className=&quot;flex flex-col&quot;&gt;
      &lt;Formik
        initialValues={initialValues}
        onSubmit={submitData}
        enableReinitialize
      &gt;
        {({ isSubmitting, setFieldValue, values }) =&gt; (
          &lt;Form&gt;
            &lt;div className=&quot;flex flex-col&quot;&gt;
              &lt;label htmlFor=&quot;fileUpload&quot; className=&quot;block mb-4&quot;&gt;
                Upload new transactions to be classified:
              &lt;/label&gt;
              &lt;input
                id=&quot;file&quot;
                name=&quot;file&quot;
                type=&quot;file&quot;
                onChange={(event) =&gt; {
                  setFieldValue(&quot;filePath&quot;, event.currentTarget.files[0]);
                }}
              /&gt;
              &lt;div className=&quot;flex gap-4&quot;&gt;
                &lt;button
                  type=&quot;submit&quot;
                  className=&quot;bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded&quot;
                &gt;
                  Classify
                &lt;/button&gt;
                &lt;button
                  type=&quot;button&quot;
                  className=&quot;bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded&quot;
                  onClick={() =&gt; handleUpdateClasses(values)}
                &gt;
                  Update Categories
                &lt;/button&gt;
                &lt;button
                  type=&quot;button&quot;
                  className=&quot;bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded&quot;
                  onClick={() =&gt; handleExportData(values)}
                &gt;
                  Export New Data
                &lt;/button&gt;
              &lt;/div&gt;
            &lt;/div&gt;
            &lt;ExpenseTable data={values?.expenses} /&gt;
          &lt;/Form&gt;
        )}
      &lt;/Formik&gt;
    &lt;/div&gt;
  );
}
</code></pre>
<p>The table showing the uploaded expenses and letting the user classify is built as follows:</p>
<pre><code>import React, { useState } from &quot;react&quot;;
import { Field, FieldArray } from &#39;formik&#39;

const ExpenseTable = ({ data }) =&gt; {
  const [selectedCategories, setSelectedCategories] = useState({});

  return (
    &lt;div className=&quot;relative overflow-x-auto bg-white shadow-md rounded my-6 text-xs&quot;&gt;
      &lt;FieldArray
        name=&quot;expenses&quot;
        render={(arrayHelpers) =&gt; (
          &lt;&gt;
            &lt;table className=&quot;max-w-screen-2xl w-full table-auto overflow-auto&quot;&gt;
              &lt;thead&gt;
                &lt;tr className=&quot;bg-gray-200 text-gray-600 uppercase text-xs leading-normal&quot;&gt;
                  &lt;th className=&quot;py-3 px-6 text-left text-xs&quot;&gt;Date&lt;/th&gt;
                  &lt;th className=&quot;py-3 px-6 text-left&quot;&gt;Amount&lt;/th&gt;
                  &lt;th className=&quot;py-3 px-6 text-left&quot;&gt;Narrative&lt;/th&gt;
                  &lt;th className=&quot;py-3 px-6 text-left&quot;&gt;Categories&lt;/th&gt;
                &lt;/tr&gt;
              &lt;/thead&gt;
              &lt;tbody className=&quot;text-gray-600 text-xs font-light&quot;&gt;
                {data.map((item, index) =&gt; (
                  &lt;tr
                    key={index}
                    className={
                      (index % 2 === 0 ? &quot;bg-white&quot; : &quot;bg-gray-50&quot;) +
                      &quot; border-b border-gray-200&quot;
                    }
                  &gt;
                    &lt;td className=&quot;py-2 px-3 text-left&quot;&gt;{item?.Date}&lt;/td&gt;
                    &lt;td className=&quot;py-2 px-3 text-left&quot;&gt;{item?.Amount}&lt;/td&gt;
                    &lt;td className=&quot;py-2 px-3 text-left&quot;&gt;{item?.Narrative}&lt;/td&gt;
                    &lt;td className=&quot;py-2 px-3 text-left&quot;&gt;
                    &lt;Field
                        as=&quot;select&quot;
                        name={`expenses.${index}.Categories`}
                      &gt;
                        &lt;option value={null}&gt;none&lt;/option&gt;
                        &lt;option value=&quot;Groceries&quot;&gt;Groceries&lt;/option&gt;
                        &lt;option value=&quot;Shopping&quot;&gt;Shopping&lt;/option&gt;
                        &lt;option value=&quot;DinnerBars&quot;&gt;Dinner/Bars&lt;/option&gt;
                        &lt;option value=&quot;Medical&quot;&gt;Medical&lt;/option&gt;
                        &lt;option value=&quot;Transport&quot;&gt;Transport&lt;/option&gt;
                        &lt;option value=&quot;Utility&quot;&gt;Utility&lt;/option&gt;
                        &lt;option value=&quot;Travel&quot;&gt;Travel&lt;/option&gt;
                        &lt;option value=&quot;Business&quot;&gt;Business&lt;/option&gt;
                        &lt;option value=&quot;Living&quot;&gt;Living&lt;/option&gt;
                      &lt;/Field&gt;
                    &lt;/td&gt;
                  &lt;/tr&gt;
                ))}
              &lt;/tbody&gt;
            &lt;/table&gt;
          &lt;/&gt;
        )}
      /&gt;
    &lt;/div&gt;
  );
};

export default ExpenseTable;
</code></pre>
<p>You can see that all this is a basic Formik form and a few buttons.</p>
<p><img src="https://www.learnedlate.com/images/writing/building-an-expense-classification/3.webp" alt="Classifier web page with Choose file, Classify, Update Categories and Export New Data buttons above a transactions table"></p>
<p>A user walks through these steps:</p>
<ol>
<li><p>Upload a CSV file (currently needs to be in the right format)</p>
</li>
<li><p>Hit classify (which calls the Python API and applies the pre-trained model to the new dataset)</p>
</li>
<li><p>Correct any mistakes by selecting a new category in the dropdown</p>
</li>
<li><p>Hit update categories to retrain the model with a newly classified dataset</p>
</li>
<li><p>Export data to add it to whatever tool/sheet you use to classify all your expenses</p>
</li>
</ol>
<p>Let’s have a look at the API next.</p>
<h2>Bank statement classification</h2>
<p>I started off with a tutorial from <a href="https://towardsdatascience.com/categorize-free-text-bank-transaction-descriptions-using-bert-44c9cc87735b">here</a>. It’s using <a href="https://en.wikipedia.org/wiki/BERT_(language_model)">BERT</a> and Python to add and categorise the transactions based on a trained language model and your own training data. All it needs is the bank statement descriptions.</p>
<p><img src="https://www.learnedlate.com/images/writing/building-an-expense-classification/4.webp" alt="List of raw bank transaction descriptions such as TRANSPORTFORNSW TAP SYDNEY"></p>
<p>The tutorial was really useful to do an initial breakthrough, but in order to use it in an app, I had to rewrite the code to modular functions (<a href="https://github.com/fstrauf/txClassify/blob/Tutorial_Classify/api/index.py">all code here</a>):</p>
<pre><code>import datetime
from io import StringIO
import json
import logging
from flask import Flask, request, make_response
import nltk
from nltk.tokenize import word_tokenize
import re
import pandas as pd
import numpy as np
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity

# from flask_cors import CORS

app = Flask(__name__)
# CORS(app)

logging.basicConfig(level=logging.DEBUG)

@app.route(&quot;/api/classify&quot;, methods=[&quot;POST&quot;])
def classify():
    file = request.files[&quot;file&quot;]
    app.logger.debug(f&quot;Received file: {file}&quot;)
    file_contents = file.read().decode(&quot;utf-8&quot;)
    csv_data = StringIO(file_contents)

    df_unclassified_data = pd.read_csv(
        csv_data, header=None, names=[&quot;Date&quot;, &quot;Amount&quot;, &quot;Narrative&quot;, &quot;old&quot;]
    )

    df_unclassified_data.drop(&quot;old&quot;, axis=1, inplace=True)
    # print(df_unclassified_data)

    trained_embeddings_BERT = np.load(&quot;trained_embeddings.npy&quot;)
    classified_file_path = &quot;all_expenses_classified.csv&quot;
    df_classified_data = pd.read_csv(classified_file_path)
    print(&quot;Found trained data&quot;)

    output = classify_expenses(
        df_unclassified_data, trained_embeddings_BERT, df_classified_data
    )

    df_output = pd.DataFrame.from_dict(output)

    # Convert the DataFrame to JSON
    json_data = df_output.to_json(orient=&quot;records&quot;)

    response = make_response(json_data)
    response.headers[&quot;Content-Type&quot;] = &quot;application/json&quot;

    # Return the JSON data
    return json_data

@app.route(&quot;/api/convertToCSV&quot;, methods=[&quot;POST&quot;])
def convertToCSV():
    data = request.json
    df = pd.DataFrame(data)
    
    csv_data = df.to_csv(index=False)
    response = make_response(csv_data)
    response.headers[&quot;Content-Disposition&quot;] = &quot;attachment; filename=exported_data.csv&quot;
    response.headers[&quot;Content-type&quot;] = &quot;text/csv&quot;
    
    return response

@app.route(&quot;/api/retrain&quot;, methods=[&quot;POST&quot;])
def retrain():
    try:
        data = request.json
        df_reclassified = pd.DataFrame(data)
        
        df_reclassified = df_reclassified.rename(columns={&quot;Amount&quot;: &quot;Debit Amount&quot;})

        classified_file_path = &quot;all_expenses_classified.csv&quot;
        df_classified_data = pd.read_csv(classified_file_path)

        df_combined = pd.concat(
            [df_classified_data, df_reclassified], ignore_index=True
        )
        df_combined = df_combined.drop_duplicates()

        text_descriptions = df_combined[&quot;Narrative&quot;]
        text_BERT = text_descriptions.apply(lambda x: clean_text_BERT(x))

        bert_input = text_BERT.tolist()
        model = SentenceTransformer(&quot;paraphrase-mpnet-base-v2&quot;)
        embeddings = model.encode(bert_input, show_progress_bar=True)
        embedding_BERT = np.array(embeddings)

        np.save(&quot;trained_embeddings.npy&quot;, embedding_BERT)
        df_combined.to_csv(&quot;all_expenses_classified.csv&quot;, index=False)

        response = make_response({&quot;message&quot;: &quot;Success: Retraining completed successfully!&quot;})
        response.headers[&quot;Content-Type&quot;] = &quot;application/json&quot;
        return response

    except Exception as e:
        response = make_response({&quot;error&quot;: str(e)})
        response = make_response({&quot;error&quot;: &#39;&#39;})
        response.headers[&quot;Content-Type&quot;] = &quot;application/json&quot;
        return response

def clean_text_BERT(text):
    text = text.lower()

    text = re.sub(
        r&quot;[^\\w\\s]|https?://\\S+|www\\.\\S+|https?:/\\S+|[^\\x00-\\x7F]+|\\d+&quot;,
        &quot;&quot;,
        str(text).strip(),
    )

    text_list = word_tokenize(text)
    result = &quot; &quot;.join(text_list)
    return result

def classify_expenses(df_unclassified_data, trained_embeddings_BERT, df_training_data):
    desc_new_data = df_unclassified_data[&quot;Narrative&quot;]
    amount = df_unclassified_data[&quot;Amount&quot;]
    date = df_unclassified_data[&quot;Date&quot;]

    text_BERT = desc_new_data.apply(lambda x: clean_text_BERT(x))

    bert_input = text_BERT.tolist()
    model = SentenceTransformer(&quot;paraphrase-mpnet-base-v2&quot;)
    embeddings_new = model.encode(bert_input, show_progress_bar=True)
    embedding_BERT_new = np.array(embeddings_new)

    similarity_new_data = cosine_similarity(embedding_BERT_new, trained_embeddings_BERT)
    similarity_df = pd.DataFrame(similarity_new_data)

    index_similarity = similarity_df.idxmax(axis=1)

    data_inspect = df_training_data.iloc[index_similarity, :].reset_index(drop=True)

    annotation = data_inspect[&quot;Categories&quot;]

    d_output = {
        &quot;Date&quot;: date,
        &quot;Amount&quot;: amount,
        &quot;Narrative&quot;: desc_new_data,
        &quot;Categories&quot;: annotation,
    }
    return d_output

def run_test_classify(test_file_name):
    with app.test_client() as client:
        with open(test_file_name, &quot;rb&quot;) as file:
            response = client.post(&quot;/api/classify&quot;, data={&quot;file&quot;: file})
            # print(response.get_json())

def run_test_retrain(test_data):
    with app.test_client() as client:
        response = client.post(&quot;/api/retrain&quot;, json=test_data)
        print(response.get_json())

if __name__ == &quot;__main__&quot;:
    
    app.run()
    # test_file_name = &quot;new_expenses.csv&quot;
    # run_test_classify(test_file_name)
    

    # test_data = [
    #     {
    #         &quot;Date&quot;: &quot;27/05/2023&quot;,
    #         &quot;Amount&quot;: -27.88,
    #         &quot;Narrative&quot;: &quot;CRUISIN MOTORHOMES CAMBRIDGE AUS Card xx6552 Value Date: 25/05/2023&quot;,
    #         &quot;Categories&quot;: &quot;Travel&quot;,
    #     },
    #     {
    #         &quot;Date&quot;: &quot;26/05/2023&quot;,
    #         &quot;Amount&quot;: -5.44,
    #         &quot;Narrative&quot;: &quot;TRANSPORTFORNSW TAP SYDNEY AUS Card xx0033 Value Date: 23/05/2023&quot;,
    #         &quot;Categories&quot;: &quot;Transport&quot;,
    #     },
    #     {
    #         &quot;Date&quot;: &quot;24/05/2023&quot;,
    #         &quot;Amount&quot;: -7.58,
    #         &quot;Narrative&quot;: &quot;Girdlers Dee Why Dee Why NS AUS Card xx6552 Value Date: 22/05/2023&quot;,
    #         &quot;Categories&quot;: &quot;DinnerBars&quot;,
    #     },
    # ]
    # run_test_retrain(test_data)
</code></pre>
<p>The above API consists of two main functions:</p>
<p><strong><a href="https://github.com/fstrauf/txClassify/blob/Tutorial_Classify/api/index.py#L25">classify</a></strong>: takes the uploaded file, extracts the transaction description, loads the pre-trained model and matches categories.</p>
<p><strong><a href="https://github.com/fstrauf/txClassify/blob/Tutorial_Classify/api/index.py#L72">retrain</a></strong>: takes a categorised dataset and appends it to the total set of transactions to then retrain the dataset.</p>
<p>The remaining functions are for testing and exporting the trained data of that month into whatever solution you use to keep track of all your expenses (<a href="https://www.learnedlate.com/writing">I’m using something like this</a>).</p>
<p>For it all to work, you will need to run it with retraining for the very first time with a month of data just to create that initial training data set.</p>
<h2>Next steps</h2>
<p>This is obviously barebones basic and won’t be able to replace what I have yet. But it is a little modular part that I can already use every month to classify my expenses.</p>
<p>Next, I’d love to get into storing the data somewhere and adding some features to analyse the transactions into something meaningful. Perhaps also some more generic way of handling input CSV files.</p>
<p>Stay tuned.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Fuck you money doesn’t mean you need to be rich</title>
      <link>https://www.learnedlate.com/writing/fuck-you-money-doesnt-mean-you-need</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/fuck-you-money-doesnt-mean-you-need</guid>
      <pubDate>Fri, 07 Jul 2023 00:00:00 GMT</pubDate>
      <description>After clashing with my co-workers at my corporate job last year, I decided to pull the trigger and quit. Did I have a new job? No.</description>
      <content:encoded><![CDATA[<p><img src="https://www.learnedlate.com/images/writing/fuck-you-money-doesnt-mean-you-need/1.webp" alt=""></p>
<p>After clashing with my co-workers at my corporate job last year, I decided to pull the trigger and quit. Did I have a new job? No.</p>
<p>I had been working on a side project, but this was far from profitable and thus unable to cover my expenses.</p>
<p>I did it anyway because I knew I had fuck you money.</p>
<p>The term fuck you money means having enough financial independence to be able to say &quot;fuck you&quot; to unfavourable situations or people.</p>
<p>Financial independence is great as it can help you reduce stress, give you a sense of security and provide freedom to choose what you want to do.</p>
<p>For many, the term however feels out of reach. This piece for instance assumes you need enough to retire forever:</p>
<p><strong><a href="https://money.com/f-u-money-defined-how-much-calculator/">How Much Money Would You Need to Ditch Your Job—Forever?</a></strong></p>
<p>I’m far from being rich enough to retire forever, that’s why I was working after all.</p>
<p>So what if we think small?</p>
<h2>Thinking Small</h2>
<p>What if fuck your money enabled you just to buy <strong>some</strong> time. <strong>Not all the time for the rest of your life. Just some.</strong></p>
<p>Just enough to quit your job and take time to find a new one, if you don’t like your boss. Fuck-you-boss-money.</p>
<p>Others take more time off to start a business. Fuck-you-corporate-job-money.</p>
<p>Some lucky souls will take a few years out of their 30s and travel with the grey nomads. Fuck-you-hamster-wheel-money.</p>
<p>Whatever you do, size it to how much you have.</p>
<p>The important thing to realise is that money can buy you many shiny things: status symbols, a fancy car, Uber Eats all week, but it can also buy you good old <strong>time</strong>.</p>
<p><img src="https://www.learnedlate.com/images/writing/fuck-you-money-doesnt-mean-you-need/2.webp" alt=""></p>
<p>This took me a bit to realise: Money can buy you time.</p>
<p>And most importantly, it’s not binary. You don’t have to be rich and retire for the rest of your life. You can start buying as much as you need or as much as you can afford.</p>
<h2>Some Math</h2>
<p>When I got into this situation with my job, I had a good understanding of my financial parameters. I was tracking our expenses and knew how much we had been saving. The formula below was thus very simple to calculate and I encourage everyone to have at least a rough understanding of your own financial parameters.</p>
<p>Here are the basics:</p>
<p><em><strong>time you can take off = savings - expenses</strong></em></p>
<p>This is really all there is to fuck you money. Understanding these two parameters will allow you to calculate something like your runway.</p>
<p><strong>How long can you survive at your current expenses before having to get a job again?</strong></p>
<p>Let’s say you have $30k in the bank and spend $3k a month. This will allow you to buy yourself 10 months of time.</p>
<p>It could be enough to start a business or take some time off to rethink career choices.</p>
<p>Think of it like this: <strong>savings are stored time.</strong></p>
<p>Of course, you can add endless levels of complexity such as passive income or the fact that you also need to save for retirement, but most people don’t even think about their savings in this simple way.</p>
<p>Start with the basics. Your savings and expenses add more complexity later on.</p>
<p>Just being aware of your stored time account and what impacts it, can help you a great deal in your life.</p>
<h2>More Time</h2>
<p>The parameter I’m always trying to tweak is how to get more stored time into my account. The <a href="https://www.reddit.com/r/financialindependence/wiki/faq/#wiki_the_basics">FIRE movement</a> (Financial Independence, Retire Early) covers a lot of ground and I highly recommend it.</p>
<p>The basics to saving up more (= more time) are blatantly simple and will be obvious to most:</p>
<p>a) Lowering your expenses - spend less and keep more.</p>
<p>b) Increasing your income through a pay raise, a second job or passive income on your investments.</p>
<p>The point of this post is really not to get into the specifics of what the FIRE movement has worked out in great detail (a &amp; b above).</p>
<p>The point is to be aware of the two parameters; savings and expenses and how they impact the free time you have at your disposal.</p>
<p>Only if you are aware of them can you start influencing them and start working towards increasing them.</p>
<p>Always make sure to have a bit of fuck you money left. Having it gives you peace of mind.</p>
]]></content:encoded>
    </item>
    <item>
      <title>How to build a prototype</title>
      <link>https://www.learnedlate.com/writing/how-to-build-a-prototype</link>
      <guid isPermaLink="true">https://www.learnedlate.com/writing/how-to-build-a-prototype</guid>
      <pubDate>Thu, 12 Jan 2023 00:00:00 GMT</pubDate>
      <description>When you are deep in the weeds on some topic, you’ll generate many ideas. Prototyping is excellent for quickly verifying these ideas so you can either discard…</description>
      <content:encoded><![CDATA[<p>When you are deep in the weeds on some topic, you’ll generate many ideas. Prototyping is excellent for quickly verifying these ideas so you can either discard them or spend more time on them if the feedback was positive.</p>
<p>At <a href="https://twitter.com/tokenomicsdao">Tokenomics DAO</a> we’ve been doing this a lot. We’ve built an <a href="https://mobile.twitter.com/tokenomicsdao/status/1532348774525587458">Evaluation Framework</a>, the <a href="https://twitter.com/tokenomicsdao/status/1580168925999792129">Tokenomics Design Framework</a>, a <a href="https://tokenomicsdao.substack.com/p/distributing-rewards-in-decentralised">custom voting tool</a>, and <a href="https://www.tokenomicshub.xyz/">Tokenomics Hub</a>.</p>
<p>I want to take the most recent prototype — Tokenomics Hub — and walk through how I’ve taken it to a working prototype, almost MVP in a couple of weeks using JavaScript.</p>
<p><strong>TL;DR</strong></p>
<ol>
<li><p><strong>Copy, paste, adjust</strong>: Find something similar and use it as a template. No need to reinvent the wheel.</p>
</li>
<li><p><strong>Use momentum:</strong> Get stuff done a lot faster when you’re in the flow and are ticking a lot of boxes. Think in small steps to keep that dopamine from your achievements coming.</p>
</li>
<li><p><strong>Build chunk by chunk:</strong> Along the same lines as #2; have the end product in mind, but don’t let that overwhelm you. Build small, working iterations that you can show and use.</p>
</li>
<li><p><strong>Copy and paste styles:</strong> Leverage building blocks, such as ready-made and styled components to build stuff faster.</p>
</li>
<li><p><strong>Simple first, best solution later:</strong> It’s tempting to nerd out and dive into some topic, but try and go for speed and simplicity first. You can always build the proper solution later.</p>
</li>
</ol>
<p><img src="https://www.learnedlate.com/images/writing/how-to-build-a-prototype/1.webp" alt=""></p>
<h2>Prototype vs. MVP</h2>
<p>Our friend ChatGPT defines it as follows:</p>
<p><img src="https://www.learnedlate.com/images/writing/how-to-build-a-prototype/2.webp" alt=""></p>
<p>I’m not too fussed about definitions here and think there is a connection where one can move from prototype to MVP easily, sometimes without notice. We do that all the time.</p>
<p>The most important thing for both however is to use incremental steps when building, so that a user always has something to try.</p>
<p><img src="https://www.learnedlate.com/images/writing/how-to-build-a-prototype/3.webp" alt=""></p>
<p><em>Source: Author/Copyright holder: Henrik Kniberg. Copyright terms and license: All rights reserved</em></p>
<h2>The idea of Tokenomics Hub</h2>
<p>The idea we want to verify is a platform, where users can design, discuss, research, and share all things tokenomics.</p>
<blockquote>
<p>Ever notice that there is no tokenomics-focused online platform to speed-walk your project research?</p>
<p>We are changing that!</p>
<p>You get:<br>Condensed information.<br>Scoring.<br>Collaboration.<br>Links to all our content.</p>
<p>Check out the prototype and our product vision.<br>(link below!)</p>
<p>🧵👇</p>
<p>— <a href="https://twitter.com/tokenomicsdao/status/1597972277492035586">@tokenomicsdao</a></p>
</blockquote>
<p>It’s essential to have the end product in mind.</p>
<p>More important is to start with something small and tangible.</p>
<p>A fraction of the end product.</p>
<p>For us, it’s a list of protocols and a breakdown of their respective tokenomics. Starting with a small and tangible first version makes it easy to utilize templates.</p>
<p>Many templates exist, so I picked a blog post example on Nextjs using Prisma with Planetscale and deployed it all on Vercel.</p>
<p>Here is what I used: <a href="https://vercel.com/guides/nextjs-prisma-postgres">https://vercel.com/guides/nextjs-prisma-postgres</a></p>
<p>The template shows you how to build this.</p>
<p><img src="https://www.learnedlate.com/images/writing/how-to-build-a-prototype/4.webp" alt=""></p>
<p>It contains most of the framework to take it to this:</p>
<p><img src="https://www.learnedlate.com/images/writing/how-to-build-a-prototype/5.webp" alt=""></p>
<h2>Copy, paste, and adjust</h2>
<p>I like to use this approach to spin up something quickly, validate your ideas, and continue to add features as I see fit.</p>
<p>I’m not a great developer by any means, but a little JavaScript and some CSS will get you quite far if you have the right template to start from.</p>
<p>Building a prototype mostly is just copying and pasting different elements, filling them with your data, and styling them so they look like your own.</p>
<p>There are a ton of different sources to get you started such as <a href="https://vercel.com/templates/next.js/skeleton">this repository from Vercel</a> — just clone the template you like, install it, run it locally, make your changes, deploy it and most importantly, validate it.</p>
<h2>Use momentum</h2>
<p>This is where the image from the beginning comes in again:</p>
<p><img src="https://www.learnedlate.com/images/writing/how-to-build-a-prototype/6.webp" alt=""></p>
<p><em>Source: Author/Copyright holder: Henrik Kniberg. Copyright terms and license: All rights reserved</em></p>
<p>Building stuff can often be a mind game, where you might feel held back by the overwhelming complexity of the task. That’s why it’s so good to copy, paste, and adjust.</p>
<p>It gets the momentum going. All changes you are doing now are building on something that is already working and showable.</p>
<p>You’re not starting from a blank slate anymore.</p>
<p>I find it a lot easier to add new bits and pieces, modify or extend and dare to even take on larger developments from here.</p>
<p>Often I won’t even start with a prototype if I have all these complex features in mind.</p>
<p>It sort of blocks you. You think you can’t pull it off and you don’t even start.</p>
<p>I try to think small.</p>
<p>In small steps at least.</p>
<p>You should have the big picture in mind but don’t try to build that immediately.</p>
<p>It’s important to have these little milestones of working and showable prototype versions.</p>
<h2>Building chunk by chunk</h2>
<p>I would have thought it was way too difficult to build a custom form, with a rich text editor, image upload, and autosave, but I broke it down into small achievable chunks.</p>
<p><img src="https://www.learnedlate.com/images/writing/how-to-build-a-prototype/7.webp" alt=""></p>
<p>Initially, the app didn’t even have data entry, keeping it as simple as possible. Once I had that first chunk up and running, I took on the next bit i.e. building a custom form with Formik, that is synced to our DB.</p>
<p>✅ Done, Deployed, Achievement unlocked.</p>
<p>Once the custom form was running, I managed to find the rich text editor TipTap and got their example to work, and added it to the form.</p>
<p>✅ Done, deployed, another achievement unlocked.</p>
<p>Generally, I find it more important to release something that’s working, than to ship the perfect product all at once.</p>
<p>Don’t get intimidated or scared by the complexity of the end product.</p>
<p>Just take it piece by piece and make sure to have these little achievements aka working or stable prototype versions in between, that you can show.</p>
<h2>Copy and paste styling</h2>
<p>I like to leave styling for last and ideally to a pro. Nevertheless, I found that tailwind is a great and easy-to-use library to style your app.</p>
<p>What I like best is the countless examples and templates that are available and can be easily copied and pasted into your app.</p>
<p>Building a prototype is a lot of copy and paste.</p>
<p>Nice header bar. Looks familiar?</p>
<p><img src="https://www.learnedlate.com/images/writing/how-to-build-a-prototype/8.webp" alt=""></p>
<p>That’s because you can just copy the styled code and adjust it to your needs. Don’t need to be a pro in CSS.</p>
<p><img src="https://www.learnedlate.com/images/writing/how-to-build-a-prototype/9.webp" alt=""></p>
<p>For many other areas, I’ve done just the same. Just google tailwind style table and you’ll find a whole stack of sites <a href="https://flowbite.com/docs/components/tables/">like this one</a> with a ton of examples on how to style nice tables:</p>
<p><img src="https://www.learnedlate.com/images/writing/how-to-build-a-prototype/10.webp" alt=""></p>
<p>Styling doesn’t need to be perfect for prototypes, but if you want people to try stuff out, it shouldn’t look too bad.</p>
<h2>Simple first, best solution later</h2>
<p>When building a prototype, I first like to go for speed. You don’t need the best solution with all the bells and whistles from the start. What matters is adding features that let you validate your idea.</p>
<p>For most, an intimidating topic to tackle is the user-login-flow. Think of signup, social login, roles, etc. 🤯</p>
<p><img src="https://www.learnedlate.com/images/writing/how-to-build-a-prototype/11.webp" alt=""></p>
<p>I started with a more technical solution, using next-auth, but it quickly got a little too complicated.</p>
<p>It was slowing me down.</p>
<p>I discovered Clerk, which takes care of all the heavy lifting and allows me to implement the whole user flow quickly.</p>
<p>Who knows if it’s the best solution, but it got me a quick win with my user flow. The library is quite slow but the team has promised to ship a fix for this soon.</p>
<p>Once it’s time to mature and find a better solution you can still ditch the simple initial one.</p>
<p>I’m willing to take that sacrifice. What’s the alternative? Building everything properly from the beginning is probably going to take you a lot longer.</p>
<p>A prototype is all about getting something out quickly and validating it with users.</p>
<p>The initial library I used for the calculator was really simple and quick to implement, but I was starting to reach its limits (too bulky, slow, and not flexible).</p>
<p><img src="https://www.learnedlate.com/images/writing/how-to-build-a-prototype/12.webp" alt=""></p>
<p>I found better ones, namely VISX from Airbnb, and replaced chartjs. It did take more time to build it properly, but since the rest of the app was already in place, it made it a lot easier to implement and fit in.</p>
<h2>Conclusion</h2>
<p>This was very focused on developing stuff, but the topics mentioned are very much applicable to non-coding examples like the Tokenomics Design Framework too.</p>
<p>Here are the key takeaways:</p>
<ol>
<li><p><strong>Copy, paste, adjust</strong>: Find something similar and use it as a template. No need to reinvent the wheel.</p>
</li>
<li><p><strong>Use momentum:</strong> Get stuff done a lot faster when you’re in the flow and are ticking a lot of boxes. Think in small steps to keep that dopamine from your achievements coming.</p>
</li>
<li><p><strong>Build chunk by chunk:</strong> Along the same lines as #2; have the end product in mind, but don’t let that overwhelm you. Build small, working iterations that you can show and use.</p>
</li>
<li><p><strong>Copy and paste styles:</strong> Leverage building blocks, such as ready-made and styled components to build stuff faster.</p>
</li>
<li><p><strong>Simple first, best solution later:</strong> It’s tempting to nerd out and dive deep into the weeds on some topic, but try and go for speed and simplicity first. You can always build the proper solution later.</p>
</li>
</ol>
<p>Everyone will have their preference and the way I like to do stuff is often quite pragmatic, but to build prototypes and even MVPs, it might be the right mindset to have.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
