<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JesterXL &#8211; Software, Fitness, and Gaming &#8211; Jesse Warden</title>
	<atom:link href="https://jessewarden.com/author/jesterxl/feed" rel="self" type="application/rss+xml" />
	<link>https://jessewarden.com</link>
	<description>Software &#124; Fitness &#124; Gaming</description>
	<lastBuildDate>Wed, 30 Sep 2026 14:24:48 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://jessewarden.com/wp-content/uploads/2016/08/cropped-Lambda2-32x32.png</url>
	<title>JesterXL &#8211; Software, Fitness, and Gaming &#8211; Jesse Warden</title>
	<link>https://jessewarden.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Two Cases On Why We Should Read The Code</title>
		<link>https://jessewarden.com/2026/09/two-cases-on-why-we-should-read-the-code.html</link>
					<comments>https://jessewarden.com/2026/09/two-cases-on-why-we-should-read-the-code.html#respond</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Wed, 30 Sep 2026 14:24:48 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<guid isPermaLink="false">https://jessewarden.com/?p=7326</guid>

					<description><![CDATA[Two cases to read the code. I know everything is nuanced, skills vary, and the scope of what we&#8217;re building varies. I&#8217;m aware even Kent Beck recently said &#8220;TRY to automate not reviewing the code&#8221;. This is just 2 examples where reading the code is required, even today, with multiple + wonderful LLM support tooling. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Two cases to read the code. I know everything is nuanced, skills vary, and the scope of what we&#8217;re building varies. I&#8217;m aware even Kent Beck recently said &#8220;TRY to automate not reviewing the code&#8221;. This is just 2 examples where reading the code is required, even today, with multiple + wonderful LLM support tooling.</p>



<span id="more-7326"></span>



<p class="wp-block-paragraph">I&#8217;m reviewing a mid-level dev&#8217;s PR who&#8217;s not on our team. First concern is its on our most important repo with high consequence of failure. The work could be piloted on a less risky repo, but she chose this one. She may not be aware of that context. Nowhere in the docs does it state that for the LLM&#8217;s to know, more is there a &#8220;map between repos&#8221; for our team for the LLM to have context. Should we build that? Yes. Do we have that now for the LLM? No. Does the dev know this? No. So I explain all that. She had no idea. She questioned the entire approach. This is the good part of iterative development; failing quickly; reducing the time it takes to learn. This is normal and good.</p>



<p class="wp-block-paragraph">Second concern is it&#8217;s quite large. Not just many files, but many new files, some are quite long. I explain even without Github Stacks, we should be doing small PR&#8217;s with few changes and architected for a smaller blast radius. She appreciated the review; apparently getting PR reviews, from a human, are rare in some teams. :: face palm :: She had never heard of Github stacks or even just branching off of a branch; I explained the easier version if she wanted to avoid the github complexity rabbit hole that is gh stacks. Newer LLM&#8217;s have some of this in their training data, but unless you specify it, I&#8217;ve not seen them recommend it unless the repo has rules.</p>



<p class="wp-block-paragraph">Third, approaching the work this was new for her. I don&#8217;t know what team experiences she had, nor where they are in in their CD journey, but I explained we don&#8217;t really plan that out. The whole point is to take small steps, learn, and use those learnings to inform where we should go next. So I don&#8217;t really plan or even know what the next PR&#8217;s will be, their size, nor the files. That said, I looked at her original PR and gleaned 3 smaller PR&#8217;s with only a few changes each that might form a great exercise to learn how to work in small steps since she had already trod this path once AND it&#8217;d be easier for me to have a more focus discussion on architecture since the changes are small. The LLM&#8217;s can help here if you know how to ask; I don&#8217;t think she even know you could ask such a thing yet.</p>



<p class="wp-block-paragraph">Fourth, there were various architecture challenges, many of which she&#8217;d have no context unless she was on our team. Much of the code base was OOP, little dependency injection, heavy use of mocks, little types, and a consistent use of exceptions to drive responses. I&#8217;m attempting to move the team towards a more functional, typed, and errors as values approach. LLM&#8217;s _really_ struggle with navigating this as each integration has a flurry of options, and unless you narrow each one, it&#8217;ll just best guess. This is compounded in Brownfield code bases. This takes 110% of my focus just to help navigate this large space frigate through an asteroid field while drinking my coffee using sketchy inertial dampeners. There&#8217;s no way a Junior or Mid-level could both navigate this, know all the options, nor the vision not being on our team. I suggested we pair program on this so I could show how this vision has challenge, and what to do when you&#8217;re presented with a crossroads of architecture decisions to lead by example.</p>



<p class="wp-block-paragraph">Fifth, one architecture one that was prevalent was a lack of DRY around a new framework they are using. It also uses exceptions, but checks the 5 types via instanceof; kind of like their own version of Promise.then/catch. The issue is all the parsing code is on the developer; since they didn&#8217;t use error types, you get error:unknown, and about 20+ lines of type narrowing code ensues in at least 4 call sites. At first I&#8217;m like &#8220;use types&#8221; to prevent all this. Then I was like &#8220;well, geez&#8230; ok, now you need a Zod schema to at least parse to one of the error shapes you&#8217;re expecting&#8221;. Then I was like &#8220;wait a minute, you&#8217;re doing this all over the place, why isn&#8217;t the framework handling this all for you via abstractions and types?&#8221;. Errors as types, types as values, Zod schemas parsing to known shapes, and leaky abstractions are all new concepts to her, and when you throw all of these at once, it&#8217;s quite overwhelming. We had a good brief discussion on perhaps making some new PR&#8217;s to the framework itself to help here since many others are going to run into the same implementation challenge. The framework has 200% docs, rules, and skills setup for LLM&#8217;s to be mostly Spec Driven Development style, but none of that was linked here in our repo, in her rules, or in however this was coded, LLM or not, I suppose. Again, the LLM is having to integrate this framework which has a different style into our repo which has 2 styles, with very little guidance on what to do at crossroads, so you need human in the loop guidance here.</p>



<p class="wp-block-paragraph">Sixth, the shotgun parsing and lack of an anti-corruption layer was heavy, which in turn caused a lot of shotgun parsing because the maybe&#8217;s/optional&#8217;s were everywhere. In Brownfield, that&#8217;s fine, you just slowly add the parsing higher up, leaving it in a better place than you found it. But in the Greenfield code we&#8217;re adding, you have an opportunity to do things better, while still interfacing with the old in clear boundaries. So I explained Parse, Don&#8217;t Validate, Shotgun Parsing, and how you &#8220;design for the types you want, not what you&#8217;re given by some back-end&#8221; and how Zod can handle all this in colocated code. Again, it&#8217;s a lot throw at someone who&#8217;s never heard of all this a cohesive concept. LLM&#8217;s, even Opus 3.5, has all this in its training data. It may not be aware of Zod Codecs or the encoding angle, but even ghetto-fabulous SWE 1.6 can pick that up quickly if you give it a golden example. You have to be clear, though, about all of those rules, AND how to integrate them, (e.g. use Zod .transform/.pipe to map from downstream Data Transfer Objects, aka DTO&#8217;s ,to our domain Value Objects aka VO&#8217;s, so nice types come out).</p>



<p class="wp-block-paragraph">Seventh, the LLM she was using read our code and started throwing custom class exceptions. The miss was we have a mapping layer at the top to ensure the responses match what we tell the user, so both the exception has to be shaped a certain way, the tests have to check for specific id&#8217;s, AND placement has to be thought out because since there are no types, the tests have to be aware of what level this is thrown from to test it. I explained we&#8217;re moving away from this approach to Railway programming using Neverthrow to have typed errors. I still can&#8217;t tell if this landed, but I know LLM&#8217;s can help you a ton here; I still use LLM&#8217;s to help debug Promise/ResultAsync chains when the return type isn&#8217;t requite right; they have an uncanny ability to fix it, even if you use the wrong explicit return type. Errors as Values is a huge mind shift for those used to imperative coding, especially those not from Go or Rust or FP languages. Especially tricky is the boundaries we have to map back to exceptions so our harness to &#8220;read all the errors and translate to the correct user response&#8221;. Easy with a .map, hard if you&#8217;re like &#8220;why do I need a .map?&#8221; LLM&#8217;s can grok that part easily, what&#8217;s hard for them is identifying the correct boundary. I don&#8217;t know all the boundaries, nor does she; we&#8217;d have to explore together to figure them out.</p>



<p class="wp-block-paragraph">Eighth, and this is extremely common among TypeScript devs not from an FP background, the types are more for spelling, not for doing any type of Type Driven Development, or &#8220;if it compiles, it works&#8221; philosophy. So I had to give multiple ideas for certain sections on what could be done to offload to the type system instead of numerous tests, mocks or not. Some situations were impossible, and I had to give a couple of examples to show how you can model it so those impossible situations don&#8217;t occur anymore. There were a few switch statements that had default in them, and I had to explain how exhaustiveness checking in TypeScript works, and how the LLM&#8217;s will tell you to use never, but ignore them, and how some of that wasn&#8217;t her fault because the data they were using was draw DTO&#8217;s with optionals and nulls, and some approaches on how to possibly refactor and fix that. The LLM&#8217;s are extremely aware of how to type well, and they can easily bounce between OCAML pragmatism eschewing currying, to full Scala (feels like Java) where you don&#8217;t need tests &#8220;because we typed the universe&#8221;. You have to know those styles, AND the verbosity that TypeScript entails, AND figure out where your team falls in that extremely long spectrum, AND what to type now vs later given TypeScript is gradually typed. All of that, and if you&#8217;re learning this? Oh man, it&#8217;s harder in TypeScript because it&#8217;s so verbose compared to other languages, so the LLM (or me) has to know the level you&#8217;re at to teach it. Whew!</p>



<p class="wp-block-paragraph">Had I not reviewed the code:</p>



<p class="wp-block-paragraph">&#8211; the blast radius was high for this PR, with no easy ability to identify what would have caused it given so many changes</p>



<p class="wp-block-paragraph">&#8211; condoning this behavior, human or LLM, sets a precedent that&#8217;s ok to make large PR&#8217;s. It&#8217;s not ok, and I will not condone it.</p>



<p class="wp-block-paragraph">&#8211; would have missed so many wonderful opportunities to teach; I even got a message saying &#8220;Thanks for the review, those are rare nowadays&#8221; which about made my heart sink; happy she appreciated the attention, but this should be the norm to teach, not to be a meat proxy and just &#8220;have the LLM approve it&#8221;</p>



<p class="wp-block-paragraph">&#8211; she now knows of all of this to better drive the LLM; before she wouldn&#8217;t even think to ask, and the code style + lack of rules-in-repo ensured the LLM would never volunteer alternatives</p>



<p class="wp-block-paragraph">I got to help teach, she got setup for success, we both learned how to better drive the LLM&#8217;s. THIS is why I read the code.</p>



<p class="wp-block-paragraph">2nd case is a lot simpler. Junior has a small PR to move a service to a new one with a feature flag. This new service is GraphQL, not REST, but the idea is the data will come back and map to our same domain objects. The issue, however, is despite using Zod in the new code, he&#8217;s still got Shotgun Parsing going on. If Zod safeParse works, he returns void, and continues on vs. using that safe-to-use domain data. There&#8217;s a fundamental understanding of how data validation should work, how TypeScript type narrowing works, and an LLM misunderstanding of how our code base wants you to do things given it&#8217;s brownfield and is lacking repo rules.</p>



<p class="wp-block-paragraph">Again, I get to level him up, and we both learned how we could better articulate to the LLM how to do things, both in prompts and rules, and adding yet another golden data set to give to LLM&#8217;s for the future. THAT again, is why I have to read the code.</p>



<p class="wp-block-paragraph">Yes, LLM&#8217;s are helping me. I&#8217;ve got Claude and Codex running my 3 Domain Driven Design, Unit Test, and Architecture review skills as well as SWE 1.6 in Windsurf. We have an Enterprise LLM code review that I&#8217;ve contributed to as well when I saw a core review was a bit off. So all hands are a deck for this, and helping. None of them, though, know the purpose, or does the Mid-level dev nor Junior know some of these fundamentals in architecture to ASK the LLM&#8217;s for help. Together, we all get smarter, and help the LLM&#8217;s help us more.</p>



<p class="wp-block-paragraph">Yes, there are cases where I&#8217;m not reading the code; libraries that we use, integration points that never change, infra configurations that a multitudes of red tape and cyber checks to ensure they work and are safe. However, I&#8217;m erring on the side of read all of it because I&#8217;m consistently seeing code and architecture I wouldn&#8217;t want to be on call for in production, there are so many wonderful opportunities to teach and learn myself, misunderstandings from both Dev&#8217;s and LLM&#8217;s, and all of these help me refine the LLM&#8217;s to help me, and hopefully others self-teach, in this regard.</p>



<p class="wp-block-paragraph">Finally, the most important part, is to learn. Are these requirements correct? Does this architecture allow future change more easily? Is this safe, or will we get dinged by cyber? I could go on and on; so far, the LLM&#8217;s aren&#8217;t catching all of these things, or are confused on when to apply my rules correct to all situations.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2026/09/two-cases-on-why-we-should-read-the-code.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Quitting Coffee Again</title>
		<link>https://jessewarden.com/2026/09/quitting-coffee-again.html</link>
					<comments>https://jessewarden.com/2026/09/quitting-coffee-again.html#respond</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Sun, 27 Sep 2026 14:33:35 +0000</pubDate>
				<category><![CDATA[Health]]></category>
		<guid isPermaLink="false">https://jessewarden.com/?p=7317</guid>

					<description><![CDATA[About 8 years ago, I quit coffee. It was, and still is, my only caffeine intake. I&#8217;m doing it again to see if it helps my sleep issues. Motivation When I first did it, I was motivated by 3 things that happened at the same time: Surprising Caffeine &#38; Fitness Learning&#8217;s Both of those taught [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">About 8 years ago, I quit coffee. It was, and still is, my only caffeine intake. I&#8217;m doing it again to see if it helps my sleep issues.</p>



<span id="more-7317"></span>



<h2 class="wp-block-heading">Motivation</h2>



<p class="wp-block-paragraph">When I first did it, I was motivated by 3 things that happened at the same time:</p>



<ol class="wp-block-list">
<li>Primary Care Doctor recommended I get diagnosed for ADHD; specialist says I wasn&#8217;t, told me to Google sleep studies around diet (it was more specific keywords than that, I found good articles)</li>



<li>Saw an interview with Matthew Walker on Joe Rogan who talked about the half-life of caffeine. This lead to a rabbit hole of research.</li>



<li>I was having sleep issues and hitting fitness limits.</li>
</ol>



<h2 class="wp-block-heading">Surprising Caffeine &amp; Fitness Learning&#8217;s</h2>



<p class="wp-block-paragraph">Both of those taught 3 key things that completely invalidated the &#8220;years of learning&#8221; I thought I had accrued from my fitness &amp; diet years:</p>



<ul class="wp-block-list">
<li>caffeine has a half life of almost 12 hours</li>



<li>yes, you can drink too much caffeine, resulting in disturbed sleep</li>



<li>coffee was consistently sold as a table stakes benefit to fitness; little did I know it was sabotaging my entire life</li>
</ul>



<p class="wp-block-paragraph">There were other good learning&#8217;s that arose from that, but suffice to say I was immediately extremely frustrated. When I started getting into fitness, I approached it from a nerd perspective and just read everything I could, and watched all the YouTube videos. Not 1 person, fitness guru, dietician, nor sports science grad said ANYTHING about the negative effects of caffeine. There were only 2 consistent things you&#8217;d read/hear: &#8220;Don&#8217;t drink to much&#8221; or &#8220;you can use black coffee to break a fast&#8221;. That first NEVER had any explanation, or was expanded upon.</p>



<p class="wp-block-paragraph">Most of the fitness blogs / thought leaders I really liked were super heavy on prioritizing your fitness pyramid into sleep first, diet second. Yet despite the common &#8220;turn off lights, avoid blue light on phone&#8221; etc. nothing about caffiene can ruin all of that, rather &#8220;use coffee with your BCCA&#8217;s to really make this workout count!&#8221;.</p>



<h2 class="wp-block-heading">Life Changing</h2>



<p class="wp-block-paragraph">To say removing caffeine from my life was world changing was an understatement. The amazing things that changed and 1 horrible thing:</p>



<ul class="wp-block-list">
<li>I fell asleep immediately; like a switch turning off when my head hit pillow</li>



<li>I woke up and could immediately function</li>



<li>I woke up and felt &#8220;refreshed&#8221;</li>



<li>I struggled to be creative as quickly</li>
</ul>



<p class="wp-block-paragraph">Let&#8217;s talk about them in order.</p>



<h3 class="wp-block-heading">Fall Asleep Immediately</h3>



<p class="wp-block-paragraph">The immediately falling asleep was wild. I only experienced this 3 times in my life: twice when doing extreme workout routines and on particular days I was just so tired, or when extremely sleep deprived from traveling. Even those didn&#8217;t compare to this.</p>



<p class="wp-block-paragraph">First, I&#8217;d start dreaming BEFORE I fell asleep. I read that many REM deprived individuals experience this, especially longer term alcoholics who will dream while they are awake. This is because the brain is so deprived of REM sleep.</p>



<p class="wp-block-paragraph">Second, it was consistent falling asleep where you&#8217;re just &#8220;out like a light&#8221;. No long waiting, no getting comfortable, just &#8220;click&#8221;; immediately out.</p>



<p class="wp-block-paragraph">Third, the dreams were unbelievably vivid. No nightmares except once (I had a slight tummy ache, which is normal for me to have a not-so-great dream when I don&#8217;t feel well). I still had the inability to remember most of the dreams, but still remembered way more details, and breadth then I&#8217;d usually have while on caffeine. This was consistent; every night, long, vivid dreams. Despite being fine and normal, nothing scary, I was still a bit apprehensive going to sleep some nights because I knew I was in store for some weird dreams. Despite me being an intense individual, I wasn&#8217;t used to having these intense of dreams, this often, for this long.</p>



<h3 class="wp-block-heading">Immediate Wake Up</h3>



<p class="wp-block-paragraph">This one was weird too. Typically I&#8217;d struggle to wake up. Hit snooze 50 times, get up and feel super groggy until the 3rd cup of coffee. Mornings were always rough for me. I chalked it up to my circadian rhythms, just being a night person.</p>



<p class="wp-block-paragraph">I&#8217;d be dreaming and then &#8220;I&#8217;m awake&#8221;. My eyes would open, and I&#8217;d be able to immediately sit up once I realized I was awake. I could even walk immediately to the kitchen. The sheer fact I was conscious, could sit up, and start my daily routines immediately was &#8230; just crazy. I often avoided people, social media, and my family on purpose because I just hated mornings so much and was such in a bad mood until the caffeine kicked it, and I was my normal, positive, high-strung self.</p>



<h3 class="wp-block-heading">Refreshed</h3>



<p class="wp-block-paragraph">This one was the most wild. Once I stood up&#8230; I felt better. BETTER. Like &#8220;I&#8217;m glad I slept&#8221; and &#8220;I feel refreshed&#8221;. I cannot articulate the level of disrespect and anger I felt for those who would create medical forms asking you &#8220;Do you wake up feeling refreshed?&#8221;. I likened those people creating those questions as &#8220;Do you own 50 Lamborghini&#8217;s on your Unicorn ranch on the moon?&#8221; or &#8220;What will you invest in once we have world peace?&#8221;. These people are completely out of touch with reality. Nobody wakes up &#8220;refreshed&#8221;. Healthly or not, fit or not, we&#8217;re all tired, and even morning people I&#8217;ve talked morning people, and they too struggle to get started. Please remove this dumb question from these forms. It is a myth; nobody wakes up &#8220;refreshed&#8221;. I can&#8217;t take you seriously.</p>



<p class="wp-block-paragraph">Then it happened to me. I did wake up refreshed. Every day. For weeks. It took me a long while to reconcile what was happening, and my anger towards feeling &#8220;misled&#8221; by the fitness industry deepened. Being older now, I don&#8217;t blame them. Many are young and aren&#8217;t as adversely affected. Many doing the writing/influencing have amazing genetics. The research and narratives around caffeine were buried; even the keyword searches or algorithms used to filter content on social did NOT surface anything negative about caffeine. All was positive with the silly warnings of &#8220;don&#8217;t drink too much caffeine&#8221; with nobody explaining what too much meant.</p>



<p class="wp-block-paragraph">I later learned that caffeine is one of the largest traded and consumed drugs in the world. It&#8217;s not just an American &#8220;work till you drop, sleep when you&#8217;re dead&#8221; culture thing; it&#8217;s a worldwide incentive and cultural norm.</p>



<h3 class="wp-block-heading">Brain Speed at 60%</h3>



<p class="wp-block-paragraph">I call this this one my &#8220;Brain Thesaurus Problem&#8221;.</p>



<p class="wp-block-paragraph">This was the 1 negative, and why I stopped and went back to coffee. It felt like there was a &#8220;dark veil&#8221; across my thinking. Like I was thinking in slow motion. The only way I can give you an idea what it was like is imagine if I said &#8220;Give me some words of when something is really good&#8221;.</p>



<p class="wp-block-paragraph">With coffee, I&#8217;d immediately blurt out in quick succession &#8220;rad, amazing, epic, super duper, dope, amaze&#8221;. But now&#8230; it was almost like I&#8217;d search for the words, and they weren&#8217;t there. I don&#8217;t know if some kind of wires just weren&#8217;t connecting anymore or what, but it&#8217;d take till about noon to 1pm to get back to the ability to fire on all cylinders. Physically I was fine. Mentally I felt really good. But, as a programmer, you are constantly being creative and connecting a lot of thoughts together whether through verbal communication, in chat, or in code while typing and reading. This was extremely frustrating.</p>



<p class="wp-block-paragraph">The only thing I can think was my body&#8217;s natural Cortisol and Orexin deliveries to my brain in the morning were broken or unused since I started drinking caffeine heavily as a teenager, and coffee in in particular around 14. Given my high metabolism, and strict school schedule, I was always up early and eating, and caffeine usually played a role. That&#8217;s nearly 25 years of me ignoring/overriding those morning wake up hormones.</p>



<p class="wp-block-paragraph">Anyway, given what I do for a living, after 2 weeks of this, I had to go back. Even just 1 cup of coffee and within minutes my brain worked as normal, further convincing me my body&#8217;s normal hormones were just broken for the morning.</p>



<h3 class="wp-block-heading">Last Warning: Depression</h3>



<p class="wp-block-paragraph">I&#8217;ve learned a lot of things the hard way, and started to learn many industries seem to leave out important, negative details. For example, all the amazing hype around a Keto diet, I found no mention of the Keto Flu until after I tried it. Almost as bad as when I got Covid shots, I felt like I had the flu; felt like absolute trash, on the couch for days.</p>



<p class="wp-block-paragraph">Quitting caffeine, even in the slow, wean myself off manner still had a horrible side-effect that thankfully was temporary: depression.</p>



<p class="wp-block-paragraph">I get sad sometimes just like everyone else, and I&#8217;ve had episodes during my teenage years where things were extremely hard. But those were nothing compared to this. The worst depression I&#8217;ve ever experienced in my life was the 10 days when I was no longer drinking any caffeine in the mornings, not even decaf. It wasn&#8217;t the kind where you sleep more than normal, or feel detached from friends, family, your hobbies. This was a constant, deep in my soul &#8220;things are bad&#8221; feeling. I&#8217;m a strong will type of guy, quit smoking cold turkey, go 220% into new things I&#8217;m learning, can&#8217;t be hypnotized, etc. So when I get sad, I usually get angry, and that helps bring me out of it.</p>



<p class="wp-block-paragraph">There was no anger here. Only emptiness and a deep sense that the world was sad. No dread, no anxiety, just an emptiness with me being stuck in some empty expanse of nothing, with no one, and a weak yearning to no longer be there. On the 11th day it stopped; there was like a 2% linger, but I knew it had &#8220;passed&#8221;. On the 12th day, gone totally.</p>



<p class="wp-block-paragraph">You can see why I am now more careful when I hear about new things from the fitness and diet industry.</p>



<h2 class="wp-block-heading">Why Doing This Again?</h2>



<p class="wp-block-paragraph">As I&#8217;ve gotten older, my energy levels have dropped. I&#8217;m still super high-strung compared to many I know, but it&#8217;s nothing like my 20&#8217;s. I first noticed a problem at 42 where I couldn&#8217;t finish workouts. I&#8217;d find the days I could power through, albeit barely, were when I had good sleep. People told me it was age, but I don&#8217;t think that&#8217;s 100% it. I took up Backpacking and riding a heavy motorcycle off-road, and found in most cases I had energy to do those things. After years of experiments during my 20&#8217;s and 30&#8217;s with sleep, diet, and exercise I could tell it was sleep and diet.</p>



<p class="wp-block-paragraph">The second reason is AI. A lot of the LLM&#8217;s have accelerated the rate at which I have to review, and reject or fix, crap code. Social Media has made things worse as both bots and devs who don&#8217;t know any better have gone full AI Pyschosis, cargo culting the bad practices. This has galvanized me to help teach the juniors and mid-level devs the best practices, and hold back the rushing river of slop code and technical debt. To do that, I have to be at my best emotionally, and to do that, I have to fix my sleep, diet, and fitness. Given sleep is always the most important, I&#8217;m trying to fix it.</p>



<h2 class="wp-block-heading">How Did My Life Change</h2>



<p class="wp-block-paragraph">While I went back to drinking coffee, I did some strict changes I haven&#8217;t deviated from the past 8 years.</p>



<ol class="wp-block-list">
<li>I go to bed the same time every night; 11pm</li>



<li>I ensure I allow for 8 hours of sleep, even if I don&#8217;t get it. This means alarms are set for 7am. If I need to awaken earlier, I go to bed earlier even if I sit there waiting to fall asleep.</li>



<li>I ensure it&#8217;s dark at least 60-30 minutes before when I go to sleep; usually 10pm I&#8217;ll turn off all the lights (excluding my laptop, I&#8217;m a nerd)</li>



<li>I don&#8217;t drink caffeine within 12 hours of my bedtime; so I ensure to have my last coffee by/before 11am.</li>
</ol>



<h2 class="wp-block-heading">What&#8217;s Different This Time?</h2>



<p class="wp-block-paragraph">The first thing that&#8217;s different is I&#8217;m greatly expanding the wean time. I think I did like a month last time, where I did 3 cups for 3 days, then 2 for a few days, then 1, then decaf for a week, then none. I think that was way too fast.</p>



<p class="wp-block-paragraph">I currently finished 2 weeks of just 2 large cups a day. Today is the first day of just 1 large cup. I&#8217;m going to try that for 2 weeks before I decide to make a change. Even on the 2 cups a day, I already noticed 2 days where I had the &#8220;Blocked Creativity&#8221; problem; I was trying to explain some code to a co-worker in our 9:30am meeting and struggled to find the words. I knew what was happening, but the wired connections weren&#8217;t there. After about a minute of struggling, it finally connected, albeit slowly&#8230; like when Starlink internet will occasionally just be slow for a minute and then slowly starts working again. If the 1 cup of day makes the above worse, I may go to 1 1/2 for a couple of weeks.</p>



<p class="wp-block-paragraph">Even with just the 2 cups, I already started to feel my dreams get more intense. They aren&#8217;t as long, and I don&#8217;t have any of the immediate sleep, immediate wake up effects yet, but they&#8217;re getting close; I&#8217;d say 140% intensity compared to normal.</p>



<p class="wp-block-paragraph">The other odd thing is I keep waking up SUPER early. This didn&#8217;t happen last time; I&#8217;d sleep consistently for 7 to 8 hours. This results in me getting super tired midday, often taking a nap, and then being super groggy the rest of the day. This was part of the impetus to try to fix my sleep in the first place. I&#8217;m hoping this is just a temporary health/diet thing. Summer is over and it&#8217;s already getting darker sooner, and it&#8217;s mostly dark in the mornings now so hopefully my body will adjust.</p>



<p class="wp-block-paragraph">I&#8217;m also doing more cardio now, or at least trying. I was running 3 nights a week for 3 weeks + started improving diet (haven&#8217;t _totally_ cut out alcohol on weekends yet), but noticed the scale didn&#8217;t move at all. Usually when I start cooking healthy, it does. I&#8217;m about 178lbs, which was my max during my Powerlifting days, but since the motorcycle shoulder accident a year ago, I wasn&#8217;t doing my of anything. My normal natural weight is 166; that&#8217;s where I can do moderate Body Building / Cardio, and my body just &#8220;likes to be&#8221;. Perhaps age has increased things <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f604.png" alt="😄" class="wp-smiley" style="height: 1em; max-height: 1em;" />. I&#8217;ve started <a href="https://www.bodi.com/products/body-beast">Body Beast&#8217;s Lean</a> version to lose weight for Halloween. I&#8217;ve been doing Body Beast off and on for almost 10 years, and I&#8217;ll usually do the Bulk version.</p>



<p class="wp-block-paragraph">I&#8217;ll attempt to increase my cardio as the Lean version only has 1 day a week devoted to it, so I&#8217;ll probably throw in 2 days of running. The motorcycle and backpacking trips usually take it out of me, so will probably throw a couple of them in too. We&#8217;ll see how that pans out as usually 6 weeks to 2 months in, my body, even in my early 30&#8217;s, started to struggle with the &#8220;increase in weight balanced with the fact we&#8217;ve been doing this for 2 months of high intensity&#8221;. I&#8217;ve found since the intensity never stops, I could simply drop the weight some to ensure I have the energy to continue. I do NOT feel guilty anymore doing this either. I&#8217;d rather drop from my 20lb dumbbells to my 15 or 10&#8217;s just so I can keep going for 2 more weeks. I started skipping the cut phase and just extending the last Bulk phase for 2 to 3 weeks until my body just said &#8220;stop&#8221;. May skip that this time, and do the cut phase more aggressively this time.</p>



<p class="wp-block-paragraph">I found my body is super sensitive to protein intake, meaning, muscle mass just drops. However, because I&#8217;m so high strung, I cannot live without carbs. So I may go try a vegan / animal protein on and off again the last week to see how that works. I&#8217;m not really into tracking macros or calories anymore, but I did have massive success using cardio + weights + vegan 6 days a week to decrease fat. However, this time I could compensate with some animal protein to see how much I can tolerate. That, and it&#8217;d only be for 2 weeks vs. 3 months like last time. We&#8217;ll see.</p>



<p class="wp-block-paragraph">Anyway, will report back when I&#8217;m at 0 cups a day.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2026/09/quitting-coffee-again.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Headfirst into PCI/NPI Redaction</title>
		<link>https://jessewarden.com/2026/08/headfirst-into-pci-npi-redaction.html</link>
					<comments>https://jessewarden.com/2026/08/headfirst-into-pci-npi-redaction.html#respond</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Sat, 29 Aug 2026 13:03:58 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<guid isPermaLink="false">https://jessewarden.com/?p=7311</guid>

					<description><![CDATA[tl;dr; How can prevent personal data from getting into logs and enable this for development teams without any work beyond npm update? Spending the last 3 weeks side-of-desk looking into redaction, specifically around PCI/NPI (Payment Card Industry / Non Public Information) data (bank account, personal user data, etc) in logs. You break various laws when [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">tl;dr; How can prevent personal data from getting into logs and enable this for development teams without any work beyond <code>npm update</code>?</p>



<p class="wp-block-paragraph">Spending the last 3 weeks side-of-desk looking into redaction, specifically around PCI/NPI (Payment Card Industry / Non Public Information) data (bank account, personal user data, etc) in logs. You break various laws when this happens, and it&#8217;s not a fun thing to clean it up.</p>



<span id="more-7311"></span>



<p class="wp-block-paragraph">This in turn taught me that logs aren&#8217;t the only sinks, e.g. exits of data out of your app that could have PCI/NPI data in them. Streaming data (e.g. Kinesis, Kafka, etc). HOW you get that data is also interesting. Sometimes you parse stuff through JSON.parse from a downstream, but get things you didn&#8217;t mean to. Sometimes a REST call comes in, and things you didn&#8217;t intend to keep around were from the headers. Some of this data can go into the sinks that you didn&#8217;t intentionally mean to log/stream.</p>



<p class="wp-block-paragraph">I looked at how most are solving it. The dynamic language, or &#8220;lol, wat are types&#8221; crews are basically attacking with various Regular Expressions, and string parsing. Any string you log, they either abstract things atop OOP loggers, or write single points of exit sinks like in Pino/Tap. At these points, they&#8217;ll combine multiple RegExp&#8217;s together into a mass string replacer. I&#8217;ve even see a strong arm approach of JSON.stringify&#8217;ing an Object, then redacting the big string that comes out.</p>



<p class="wp-block-paragraph">Some will mark that they redacted something. Some will mark what they redacted. Some will just say &#8220;[REDACTED]&#8221; and you don&#8217;t know if it was a bank account number (BAN), an email, or a number you wrote that was a false positive.</p>



<p class="wp-block-paragraph">The types crew will use&#8230; types. They&#8217;ll either create Branded or Variant/Sum/Union types to designate something as a secret, and ensure logging, streaming, and metrics functions cannot take those types. Some will use type proofs in functions or methods to ensure even nested type records do not contain secrets; ensuring &#8220;if it compiles, it doesn&#8217;t leak PCI data&#8221;.</p>



<p class="wp-block-paragraph">Some, particularly in the TypeScript, Python (gradually typed community) will use both. This is because the type system can, and will often, lie because developers consuming the library can hack their way around it using the 20 billion escape hatches &amp; levers these type systems give you.</p>



<p class="wp-block-paragraph">The amount of Regular Expression and string matchers is vast. I remember back in the video sharing with chat days, there were many string matchers to filter out bad words from chat, and many also included XSS helpers. This ensures that people who find they can&#8217;t type &#8220;badword&#8221; will type &#8220;b a d w o r d&#8221; and find that using spaces like that defeats the string matcher for bad words, so they can type other bad words, or even bad code snippets using spaces. The devs will counter with more aggressive string matchers and regular expressions, and they seem to err on the side of &#8220;false positives are fine because the cost of failure is quite bad&#8221;. While the chat will filter out random words you don&#8217;t think are bad, it gives business piece of mind from legal ramifications of NOT doing it. The User Experience costs here are interesting, both to users and to devs.</p>



<p class="wp-block-paragraph">I&#8217;m finding my in own work, for our existing logger, I&#8217;m having to use that dual approach of &#8220;use types to prevent this from happening&#8221;, but also using a combination of regular expressions when the narrowness of type system breaks down. I&#8217;m also thinking of starting from scratch on a secondary implementation once the first is done that type narrow specifically to ensure we don&#8217;t even need the runtime checks (well, it&#8217;s TypeScript, almost anything can be defeated with an <code>as unknown</code> so I&#8217;ll have to run various tests). But it&#8217;s clear the hybrid approach causes the API to suffer because you&#8217;re constraining what the dev can log, but also have to do a ton of type work to compensate for when they (unknowingly) lie to you.</p>



<p class="wp-block-paragraph">I really like the clean, typed approach as it lessens the attack surface, and I share a lot of this with the streaming and metrics use cases as well as those are less open to the developer so easier to constrain what gets in. It also helps when we attack the problem at the source, and immediately decode into secrets vs. &#8220;I don&#8217;t know man&#8230; they could be anywhere, let&#8217;s just JSON.stringify all the things and run a ball of RegExp on it&#8221;. Having schema libraries like Zod decode immediately to know secrets enables such a better security posture.</p>



<p class="wp-block-paragraph">Before: &#8220;Where are your secrets?&#8221; &#8220;Uh, in this codebase&#8230; I think from a downstream REST call. You&#8217;ll have to go track down their Swagger, it may/may not point them out&#8221;</p>



<p class="wp-block-paragraph">After: &#8220;Find all instances of the Secret class.&#8221;</p>



<p class="wp-block-paragraph">I&#8217;ve found that some secrets aren&#8217;t even secrets. Devs will put credit card number in a secret container, and when you look inside, it&#8217;s actually a null. Having a schema validate it&#8217;s even an actual secret prevents a lot of this from even being a problem.</p>



<p class="wp-block-paragraph">There&#8217;s also some tricky situations that reminds me of the 1989 Batman movie Joker plot. You&#8217;ll have a user&#8217;s last name and the last four digits of their credit card. Both aren&#8217;t necessarily PCI on their own&#8230; but together? Yes. Same with the chemicals Joker was pushing in the movie; isolated they were innocuous, but together, poison. There are various Intersection and Union types you can create to prevent these combinations so you can relax when it compiles.</p>



<p class="wp-block-paragraph">It&#8217;s been interesting to tackle this problem from a Brownfield approach. &#8220;How do we prevent PCI data leakage?&#8221;</p>



<p class="wp-block-paragraph">I think I&#8217;ve settled on improving the logger we have better runtime redaction, with some compile time preventative measures to help move in the right direction over time. A separate, ideal logger for where we&#8217;d like to go. This includes helpers to verify we even have secrets in the first place, and if we do, we use a Parse, Don&#8217;t Validate + Anti-Corruption Layer in the same place via a Zod transform.</p>



<p class="wp-block-paragraph">Brownfield: npm/pip update, you&#8217;ll be safer.</p>



<p class="wp-block-paragraph">Brownfield + migrate: move to this logger, you can offload the problem to the compiler, but log sinks/targets/streaming outputs remain the same.</p>



<p class="wp-block-paragraph">Greenfield: same</p>



<p class="wp-block-paragraph">Auditing: With schema parsing, we can confidently know what secrets we have, where, and what combinations we&#8217;ve forbidden.</p>



<p class="wp-block-paragraph">The escape hatches have been interesting too. Getting at your source logger, whether that&#8217;s AWS Power Tools, or Pino, or Winston or whatever is often needed to configure it, but if it&#8217;s done in more than 1 place, you should get nervous. So we have to provide the ability to do that, but also mark that we&#8217;ve done that. I can solve this with a Linter.</p>



<p class="wp-block-paragraph">For the secrets, you need to provide access to them to do business logic, but sometimes you may have to do that in multiple places unlike log/metric/streaming configurations. I &#8230; don&#8217;t know how to solve this beyond having an LLM track the Branded type that comes out and doing it&#8217;s own audit.</p>



<p class="wp-block-paragraph">Hard problems, lots of ways to approach it. While I&#8217;m having fun, I keep reminding myself why I&#8217;m doing this:</p>



<ol class="wp-block-list">
<li>ensure we&#8217;re following the law</li>



<li>we won&#8217;t have any surprise security work to do</li>



<li>make this easy on developers now in Brownfield, and a &#8220;pit of success&#8221; for those in Greenfield</li>
</ol>



<p class="wp-block-paragraph">Still more to learn, but what a rabbit hole, man.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2026/08/headfirst-into-pci-npi-redaction.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Flint&#8217;s Nice Interactive Linter Error</title>
		<link>https://jessewarden.com/2026/07/flints-nice-interactive-linter-error.html</link>
					<comments>https://jessewarden.com/2026/07/flints-nice-interactive-linter-error.html#respond</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Thu, 23 Jul 2026 13:42:26 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<guid isPermaLink="false">https://jessewarden.com/?p=7303</guid>

					<description><![CDATA[When I teach treating errors as values, and myself wonder where an error falls on the spectrum of domain vs infra vs panic, what the user and/or developer can do about it, as a UI guy at heart, I always come back to how you display that. I wanted to cover how you&#8217;d do that [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">When I teach treating errors as values, and myself wonder where an error falls on the spectrum of domain vs infra vs panic, what the user and/or developer can do about it, as a UI guy at heart, I always come back to how you display that.</p>



<span id="more-7303"></span>



<p class="wp-block-paragraph">I wanted to cover how you&#8217;d do that in Linting because now that LLM&#8217;s are showing us how &#8220;fuzzy things can still give definitive steps to help, with options&#8221;</p>



<p class="wp-block-paragraph">The cop-out is to be like &#8220;build it <a href="https://elm-lang.org/news/compiler-errors-for-humans">like Elm</a>&#8230; I mean Rust even copied that style so it must be good&#8221;.</p>



<p class="wp-block-paragraph">However, I&#8217;ve been reviewing JavaScript Linters lately, and the spectrum is pretty deep, but <a href="https://www.flint.fyi/">Flint</a> in particular has a nice Elm-like error in interactive mode.</p>



<p class="wp-block-paragraph">tl;dr; on Flint, it&#8217;s a hybrid JavaScript/TypeScript linter: the core and rules are written in TypeScript to make it easier to allow open source contributions, but plugins can be written in native code, like Biome/Oxlint are doing.</p>



<p class="wp-block-paragraph">Here&#8217;s a screenshot attached of Flint finding a linting failure on a loop using for, citing what file, why the linter failed for this particular bit of code, a suggestion of what to do, and a link to learn more. That&#8217;s &#8230; amazing.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="622" src="https://jessewarden.com/wp-content/uploads/2026/07/Screenshot-2026-07-23-at-9.02.17-AM-1024x622.png" alt="" class="wp-image-7304" srcset="https://jessewarden.com/wp-content/uploads/2026/07/Screenshot-2026-07-23-at-9.02.17-AM-1024x622.png 1024w, https://jessewarden.com/wp-content/uploads/2026/07/Screenshot-2026-07-23-at-9.02.17-AM-300x182.png 300w, https://jessewarden.com/wp-content/uploads/2026/07/Screenshot-2026-07-23-at-9.02.17-AM-768x466.png 768w, https://jessewarden.com/wp-content/uploads/2026/07/Screenshot-2026-07-23-at-9.02.17-AM-1536x933.png 1536w, https://jessewarden.com/wp-content/uploads/2026/07/Screenshot-2026-07-23-at-9.02.17-AM.png 1578w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Now imagine if _every_ domain and infrastructure error you created had even one tenth of this meat embedded inside it, with ability to print for non-prod/local dev logging scenarios? Always inspiring to me to see how people interpret errors, specifically linter errors which can be quite fuzzy/squishy, open to interpretation, but need some kind of actionable step to fix it. I really like <a href="https://www.flint.fyi/cli#--interactive">Flint&#8217;s approach here</a>. </p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2026/07/flints-nice-interactive-linter-error.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Positive Zod v3 vs v4 Learnings</title>
		<link>https://jessewarden.com/2026/07/positive-zod-v3-vs-v4-learnings.html</link>
					<comments>https://jessewarden.com/2026/07/positive-zod-v3-vs-v4-learnings.html#respond</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Mon, 20 Jul 2026 21:40:12 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<guid isPermaLink="false">https://jessewarden.com/?p=7299</guid>

					<description><![CDATA[Side of desk project is to: Learnings the past 3 days: I really don&#8217;t like that last one. I may just not do it, install in a Zod v3 project, and &#8220;see what happens&#8221; in the unhappy paths. Once done, I can wrangle the insane grossness that is Open Feature while dual-wielding Discriminated Unions of [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Side of desk project is to:</p>



<ol class="wp-block-list">
<li>wrap native fetch with Neverthrow</li>



<li>provide nicer, Elm style return types</li>



<li>abstract away decoding/enoding for JSON</li>



<li>same, but for GraphQL + company&#8217;s rules around that</li>
</ol>



<span id="more-7299"></span>



<p class="wp-block-paragraph">Learnings the past 3 days:</p>



<ul class="wp-block-list">
<li>Zod v3 to v4 has been a nightmare, so at first I just removed Zod and provided a decoder type interface instead b/c writing a Zod wrapper is like 1 line of code</li>



<li>&#8230; but then I found out in v3.25.0 they name spaced the versions, making it easier for each to co-exist</li>



<li>&#8230; so now I&#8217;m wondering if I should undo all my work of &#8220;abstracting away a Zod dependency</li>



<li>but then I found out many are moving to Standard Schema and it&#8217;s not a too obtuse type to include, thus enabling me to be nice to ArkType and Effect-ts peoplez</li>



<li>So now I think I can support Zod v4 internally, include an encoder interface for POST style operations, but still not exclude other schema libraries WHILE reserving the right to use Zod internally for various GraphQL schemas</li>



<li>&#8230; but still requiring me to map those ZodErrors to my own type to not &#8220;leak Zod out&#8221;.</li>
</ul>



<p class="wp-block-paragraph">I really don&#8217;t like that last one. I may just not do it, install in a Zod v3 project, and &#8220;see what happens&#8221; in the unhappy paths.</p>



<p class="wp-block-paragraph">Once done, I can wrangle the insane grossness that is Open Feature while dual-wielding Discriminated Unions of flame and frost brands.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2026/07/positive-zod-v3-vs-v4-learnings.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
