<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>It Might be Working</title><link>https://iguessthatworks.com/</link><description>Recent content on It Might be Working</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>Jeff Mayeur</copyright><lastBuildDate>Fri, 12 Jun 2026 07:00:00 -0700</lastBuildDate><atom:link href="https://iguessthatworks.com/index.xml" rel="self" type="application/rss+xml"/><item><title>The Librarian</title><link>https://iguessthatworks.com/posts/06-2026/the-librarian/</link><pubDate>Fri, 12 Jun 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/06-2026/the-librarian/</guid><description>
&lt;figure class="center"&gt;&lt;img src="https://iguessthatworks.com/images/the-librarian/Neurodiversity_display_University_of_Otago_Central_Library.jpg"
alt="Book display highlighting neurodiverse authors and books about neurodiversity, at University of Otago Central Library"&gt;&lt;figcaption&gt;
&lt;p&gt;&amp;quot;Book display highlighting neurodiverse authors and books about neurodiversity, at University of Otago Central Library&amp;quot; by &lt;a href="https://commons.wikimedia.org/wiki/File:Neurodiversity_display_University_of_Otago_Central_Library.jpg"&gt;DrThneed&lt;/a&gt;, licensed under &lt;a href="https://creativecommons.org/licenses/by/4.0/"&gt;CC BY 4.0&lt;/a&gt;&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;A real benefit to this break has been the ability to have a broad range of conversations about work, value, risk, and goals. From open ended musings on what the next 20 years might look like, to tactical dives into what really constitutes value creation in the agentic workplace.&lt;/p&gt;</description></item><item><title>Phishy Smells</title><link>https://iguessthatworks.com/posts/06-2026/phishy-smells/</link><pubDate>Thu, 11 Jun 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/06-2026/phishy-smells/</guid><description>
&lt;p&gt;One of the things about the job hunt that makes it more daunting is the number of scams. Like a lot of phishing these days, the quality is definitely high. Enough so that my juvenile instinct to put NanoClaw on the case to see how many of the scammers' tokens I can burn is waylaid by a subtle concern that there’s a slight risk I might end up annoying a potential connection.&lt;/p&gt;</description></item><item><title>Sloppy Joes</title><link>https://iguessthatworks.com/posts/06-2026/sloppy-joes/</link><pubDate>Wed, 10 Jun 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/06-2026/sloppy-joes/</guid><description>
&lt;p&gt;I’ve always leaned into a build flow that emphasizes working software. I like iterating on an experience and shaping the architecture at the same time. This is core to Agile: it reduces wasted time on detailed designs that miss the mark with end users. There are limitations to this approach. There’s a temptation to ship as soon as it starts to look finished, without taking the time to review critical aspects of any application, like security or accessibility.&lt;/p&gt;</description></item><item><title>Well, Now What?</title><link>https://iguessthatworks.com/posts/06-2026/well-now-what/</link><pubDate>Mon, 08 Jun 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/06-2026/well-now-what/</guid><description>
&lt;p&gt;I was fortunate enough to take two sabbaticals at my last company. Five weeks each, the first at the ten year mark, and the second at fifteen.&lt;/p&gt;
&lt;p&gt;When I joined the company, sabbaticals were highlighted as a perk with the dual goal of rewarding long-term commitment and having the employee return with fresh perspectives, renewed energy and reinvigorated creativity.&lt;/p&gt;
&lt;p&gt;I didn't give it a second thought. I figured I'd be there 2-4 years, rolling on to whatever came next just like I had at every other company. I spent zero minutes contemplating the benefit of an extended block of time off.&lt;/p&gt;</description></item><item><title>EIPO and curiosity</title><link>https://iguessthatworks.com/posts/06-2026/eipo-rnd/</link><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><guid>https://iguessthatworks.com/posts/06-2026/eipo-rnd/</guid><description>
&lt;p&gt;This &lt;a href="https://www.linkedin.com/posts/jeffabailey_greataireplacement-ai-genai-ugcPost-7467952049226362880-bxmf/?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAAAA2c_0BM-L4i26qgeIGohcw51bcC5ms28Q"&gt;LinkedIn Post&lt;/a&gt; poking fun at the #GreatAIReplacement reminded me of this now ancient paper (2022) &lt;a href="https://williamd4112.github.io/pubs/neurips22_eipo.pdf"&gt;Redeeming Intrinsic Rewards via Constrained Optimization&lt;/a&gt; on mathematical approaches to governing the balance between exploration (curiosity) and exploitation (using known approaches). The paper covers their approach to optimizing model training to play various ATARI games. The Extrinsic-Intrinsic Policy Optimization (EIPO) algorithm they proposed did seem to improve over other reinforcement algorithms.&lt;/p&gt;
&lt;p&gt;It’s interesting to think of curiosity as a mathematically definable property. I tend to view it in a slightly less quantifiable frame. This essay &lt;a href="https://thereader.mitpress.mit.edu/curiosity-is-no-solo-act/"&gt;CurioCuriosity Is No Solo Actd&lt;/a&gt; has an interesting take that I like, proposing that curiosity is communal. There’s a quote in the piece: “‘the eternal convergence of the world within any one thing,’ writes Carl Mika, such that ‘one thing is never alone and all things actively construct and compose it.’ From this perspective of deep holism, talk of knowing any one thing is ‘minimally useful.’ As such, knowledge is not properly propositional but instead procedural; it is less concerned with knowing what than with knowing how. And its wisdom lies in ‘sharing’ more than ‘stating.’”&lt;/p&gt;</description></item><item><title>A and R Block</title><link>https://iguessthatworks.com/posts/06-2026/a-and-r-block/</link><pubDate>Tue, 02 Jun 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/06-2026/a-and-r-block/</guid><description>
&lt;p&gt;Today’s musing centers around &lt;a href="https://bsky.app/profile/carnage4life.bsky.social/post/3mnatmvrw7s2q"&gt;this response&lt;/a&gt; to Steve Yegge’s Opus 4.8 critique. I’ve pulled back to Sonnet for most of what I do these days; partly that’s a cost choice and partly because I don’t have a meaningful use case for an advanced thinking model.&lt;/p&gt;
&lt;p&gt;Steve’s critique and Dare Obasanjo’s summation fit within one of the limits I’ve been seeing. I’ve identified it as the inability of a model to know when to be intentionally wrong. I understand that, with additional training data or reasoning layers, a model could be tuned to a category of voice, but it can’t reproduce my voice; even if trained on my writings, it couldn’t reproduce how I will want to express myself in a year. Yesterday my voice may have been incandescent irreverence; tomorrow it might be spurned arrogance. I’m not even a professional writer, yet I’ve found it too easy to confound Opus (&lt;a href="https://iguessthatworks.com/posts/05-2026/aiq-scale/?query=spurge"&gt;AIQ Scale&lt;/a&gt;).&lt;/p&gt;</description></item><item><title>POLP</title><link>https://iguessthatworks.com/posts/06-2026/polp/</link><pubDate>Mon, 01 Jun 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/06-2026/polp/</guid><description>
&lt;p&gt;One of the useless things I spend time on is &lt;a href="https://mtn-aqi.com/"&gt;mtn-aqi.com&lt;/a&gt; and a bunch of its siblings. I have a few air quality monitors and I occasionally like to play with the data they collect. The data itself isn’t incredibly accurate, the temperatures are off from the official record. The humidity data is worse, I’m not really sure how you get 104% Humidity (it’s actually the compensation math). The PM2.5 data is probably the most accurate. The PMS5003 sensor itself is pretty reliable, and surprisingly durable. For me that’s good enough, I’m not running a scientific study, nor looking to manage indoor air quality. Mostly I just want to know if it’s really bad more mostly good outdoor air quality; in other words should I open the windows or not.&lt;/p&gt;</description></item><item><title>The Documentarian</title><link>https://iguessthatworks.com/posts/05-2026/documentarian/</link><pubDate>Fri, 29 May 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2026/documentarian/</guid><description>
&lt;p&gt;In my household I am the Filler of Things. Rinse-aid in the dishwasher, batteries in the smoke alarms, filters — basically anything non-living that requires routine service. I may occasionally grumble about having to de-scale the coffee maker, but secretly I enjoy these simple tasks. I have my mental maps of how these things should be done. I start with the one in the primary room first: I pull the battery, check the date written with a Sharpie, and test it in a tester. If either check fails, I take a new battery, write the date on it with a Sharpie, install it, test it, and move on.&lt;/p&gt;</description></item><item><title>Go Fish: TDD and Agentic Code</title><link>https://iguessthatworks.com/posts/05-2026/go-fish/</link><pubDate>Thu, 28 May 2026 09:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2026/go-fish/</guid><description>
&lt;p&gt;I’m not a TDD devotee, but throughout my career there have been times when I’ve found it to be an effective pattern—not only to ensure that code does what I expect, but also because it allows me to think about program structure in discrete chunks. The focus on testability has helped me dissect the functional layers of an application in ways I didn’t when focusing on sequence diagrams or flowcharts.&lt;/p&gt;</description></item><item><title>Month One</title><link>https://iguessthatworks.com/posts/05-2026/month-one/</link><pubDate>Wed, 27 May 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2026/month-one/</guid><description>
&lt;p&gt;It’s been a month now since my job status changed to Resource Unassigned. I was fortunate enough to have 2 sabbaticals while at Nike, so I’ve had long breaks from work in the past, but obviously this hits a little differently. A few things jump out at me.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I’m less wound up by the frenetic nature of AI evolution. Obviously I’m using the tools a little less as I’ve focused on real-world projects more than tech, but I don’t get the urge to upgrade everything every time Claude shoves out a new version. I’m less interested in the tools, and more interested in watching the industry convulse into whatever new form it will take.&lt;/li&gt;
&lt;li&gt;It’s reassuring to see others come to conclusions in public that align with what I see happening both inside and outside of a technology role. What stands out is the focus on expertise, whether it’s in the eye of a PM or in the keystrokes of a dev, and the continued questioning of value vs. output.&lt;/li&gt;
&lt;li&gt;When it comes to being Resource Assigned, it’s clear that it’s not going to be easy, partly because of the chaos roiling the job market, and partly because it’s tougher to project out where I want to be in 20 years. Retired, sure, but not completely. I’m someone who enjoys working too much to fully stop, so how do I craft a runway that lets me continue to build?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="A Gravitron at an amusement park in the 1980s"
class="image_figure image_internal image_unprocessed"
src="https://iguessthatworks.com/images/gravitron-1980s.jpg"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>Useless Things</title><link>https://iguessthatworks.com/posts/05-2026/useless-things/</link><pubDate>Tue, 26 May 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2026/useless-things/</guid><description>
&lt;p&gt;This post landed in my feed over the weekend, &lt;a href="https://www.linkedin.com/posts/jennifer-r-moore_ceo-we-need-to-fix-engineering-theyre-activity-7463227585997737984-_ld4?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAAAA2c_0BM-L4i26qgeIGohcw51bcC5ms28Q"&gt;Direction Over Speed&lt;/a&gt;. It’s interesting to watch these types of insights slowly flow up the leadership ladder. I think it’s correct that the hard part is the discernment or judgment of the Product Manager.&lt;/p&gt;
&lt;p&gt;The speed of Engineering may have shifted, but the costs are likely going to come back up - so there’s still a distinct need to focus on building the right thing. Like many of the comments point out, it’s the skill, not the role, that needs to evolve and lead. The best PM/POs I’ve worked with are truly shapeshifters; it’s their ability to operate in varied modes based on the needs of the business, team, or strategic objectives that is their core value. I believe that kind of adaptable vision is still crucial.&lt;/p&gt;</description></item><item><title>Reskilled Again</title><link>https://iguessthatworks.com/posts/05-2026/skillapalooza/</link><pubDate>Fri, 22 May 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2026/skillapalooza/</guid><description>
&lt;p&gt;It’s interesting looking at software development job postings that still list requirements like X+ years of Java or Y+ years of TypeScript. There are certainly some niche languages where I think that’s still worth considering, and I get a bit squeamish when it comes to vibe-coded C/C++, but for most languages, years of specific experience is just not a relevant gate.&lt;/p&gt;
&lt;p&gt;The last few rounds of interviews that I participated in really highlighted the shift in how I was beginning to feel about the industry and where others were still focused. I’ve never really put much stock in deep technical interviews. I expected candidates to walk me through how they think about applying techniques, and most importantly, to be clear when they would need to phone a friend to dive deeper. Other interviewers were still drilling deep on specific technical competencies. To me, that seemed like painting a house while the garage was on fire.&lt;/p&gt;</description></item><item><title>A Frame for Intelligence</title><link>https://iguessthatworks.com/posts/05-2026/aiq-scale/</link><pubDate>Wed, 20 May 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2026/aiq-scale/</guid><description>
&lt;p&gt;I like reading research papers. There was a phase in my life where I had the good fortune to spend hours a day in a library. I would find a Master’s or Doctoral thesis to clod through, and see what, if anything, I could understand. Trust me, it’s more fun than it sounds.&lt;/p&gt;
&lt;p&gt;These days I have less time, but when I can eke out an hour or more, I’ll see if there’s anything on arxiv.org that sounds interesting. To be clear, most of what I read is well beyond my understanding. One of my goals in the next few weeks is to read through &lt;a href="https://arxiv.org/pdf/2605.19154"&gt;this paper&lt;/a&gt; a light and breezy examination of the indirect methods to study inter-generational mobility. I can read this paper, and I probably will understand aspects, but there’s no short-term, reasonable way for me to have any deep comprehension, and certainly no expertise.&lt;/p&gt;</description></item><item><title>Faster Farther</title><link>https://iguessthatworks.com/posts/05-2026/faster-farther/</link><pubDate>Tue, 19 May 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2026/faster-farther/</guid><description>
&lt;p&gt;I’m back on the word hunt, or maybe just durable taxonomy. I’ve read some pieces lately that cover how companies adopt intelligence tools. These have mostly focused on internal automation &amp;amp; creation pipelines. The basic premise of these pieces seems to span two stage-based maturity models:&lt;/p&gt;
&lt;h2 id="consultancy-based"&gt;Consultancy Based&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Awareness - (I think we’re all past this one)&lt;/li&gt;
&lt;li&gt;Experimentation - pockets of an org trying to use AI to automate or build&lt;/li&gt;
&lt;li&gt;Foundational Deployment - something is in production either for the pipeline itself or driving business value&lt;/li&gt;
&lt;li&gt;Functional - multiple teams are using AI, and multiple applications are productionized&lt;/li&gt;
&lt;li&gt;Embedded - AI is now part of how a company approaches every opportunity or process&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;OR&lt;/p&gt;</description></item><item><title>Superish-IC</title><link>https://iguessthatworks.com/posts/05-2026/superish-ic/</link><pubDate>Mon, 18 May 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2026/superish-ic/</guid><description>
&lt;p&gt;I don't have a ton to add to the current spurge of Super-IC content. I have always been a bit dubious of the long term value of the 10x engineer. That type of mindset is critical in the world of the startup, but I have thoughts-and-feelings about how it plays in larger enterprises.&lt;/p&gt;
&lt;p&gt;Instead I'm curious to know what actually makes most of us better. We all have days or hours where we are in a flow state - fully in go mode. Moments where we deliver more measurable value; more fully grasp the problem we are trying to address; where the churn is low and the output is high.&lt;/p&gt;</description></item><item><title>Just Write It Down (Digitally)</title><link>https://iguessthatworks.com/posts/05-2026/noted/</link><pubDate>Fri, 15 May 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2026/noted/</guid><description>
&lt;p&gt;One habit that’s been building for me over the last two years is note-taking. In school, and for most of my career, I’ve relied on my memory instead of taking actual notes during classes or meetings. However, the more I put intelligence tools to work, the more I rely on having digitally captured the way I think about or approach tasks. These days I take notes on everything, and I keep it simple. I don’t have a fancy note-taking app. I occasionally use dictation flows, but mostly I just type into Notes, a Markdown file, or basically whatever open text input tool is nearby.&lt;/p&gt;</description></item><item><title>The Demons in the Details</title><link>https://iguessthatworks.com/posts/05-2026/the-demons-in-the-details/</link><pubDate>Thu, 14 May 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2026/the-demons-in-the-details/</guid><description>
&lt;p&gt;Precision vs. Speed, Precision at Speed, or Precision with Speed. There are lots of posts that cover the challenge of integrating AI speed with human precision in the pursuit of value. Lots of them.&lt;/p&gt;
&lt;p&gt;I believe it's an important conversation. It must be had. Be that as it may, I think the long pole in unlocking productivity with intelligence tools is the reimagining of leadership roles. I suspect leadership teams are less prepared than they would like to think.&lt;/p&gt;</description></item><item><title>BASIC 101</title><link>https://iguessthatworks.com/posts/05-2026/basic-101/</link><pubDate>Wed, 13 May 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2026/basic-101/</guid><description>
&lt;h2 id="the-way-back-machine"&gt;The Way Back Machine&lt;/h2&gt;
&lt;p&gt;I don't recall if I encountered &lt;a href="https://en.wikipedia.org/wiki/Applesoft_BASIC"&gt;Applesoft BASIC&lt;/a&gt; or &lt;a href="https://en.wikipedia.org/wiki/Logo_%28programming_language%29"&gt;Logo&lt;/a&gt; first. I do remember playing &lt;a href="https://en.wikipedia.org/wiki/Summer_Games_%28video_game%29"&gt;Summer Games&lt;/a&gt; on an Apple &lt;em&gt;][c&lt;/em&gt;, and then thinking how cool it would be if I could make my own game. I tried BASIC, and after a lot of HPLOT-ing around, I only managed to make a really primitive version of &lt;a href="https://en.wikipedia.org/wiki/Missile_Command"&gt;Missile Command&lt;/a&gt;. It was fun, at least for a few rounds, and I loved that I could, with my limited math and comprehension of computers, make something I could interact with.&lt;/p&gt;</description></item><item><title>Signals</title><link>https://iguessthatworks.com/posts/05-2026/signals/</link><pubDate>Wed, 13 May 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2026/signals/</guid><description>
&lt;p&gt;There are 6 ingredients in the formation of this memory: the movie &lt;a href="https://www.imdb.com/title/tt0083866/"&gt;E.T. the Extra-Terrestrial&lt;/a&gt;, a &lt;a href="https://www.retroist.com/p/speak-and-spell"&gt;Speak &amp;amp; Spell&lt;/a&gt;, a &lt;a href="http://www.analyticalsci.com/store/p282/Crystal_Radio_Kit_-_Works_Without_Batteries.html"&gt;crystal radio kit&lt;/a&gt;, an &lt;a href="https://www.junkismylife.com/post/vintage-sledding-disc#google_vignette"&gt;aluminum saucer&lt;/a&gt;, lots of &lt;a href="https://emersoncustom.com/products/vintage-pushback-cloth-wire-22-gauge"&gt;22 gauge wire&lt;/a&gt;, and a tall tree. If you’ve seen ET it’s not hard to figure out where my imagination immediately went with this set of inputs. But that’s not the memory, instead it’s what came after my ignorance left me with a disassembled Speak and Spell and no new alien friends.&lt;/p&gt;</description></item><item><title>Word Search</title><link>https://iguessthatworks.com/posts/05-2026/word-search/</link><pubDate>Mon, 11 May 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2026/word-search/</guid><description>
&lt;p&gt;I spend way too much time thinking about words. Currently I’m obsessed with finding a very specific word or phrase.&lt;/p&gt;
&lt;p&gt;There’s a phenomenon that many of us encounter where we grow confident enough in our abilities to feel we are ready for whatever comes, only to find our world collapsing outward as we find our limits. Some of us are lucky enough to have spectacular implosions; ask me sometime about truncating production data tables in the before-AI times for a wild tale.&lt;/p&gt;</description></item><item><title>Hind Sites: The World of MicroSites</title><link>https://iguessthatworks.com/posts/05-2026/hind-sites/</link><pubDate>Fri, 08 May 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2026/hind-sites/</guid><description>
&lt;h2 id="preface"&gt;Preface&lt;/h2&gt;
&lt;p&gt;This series isn't intended to be a comprehensive review of technology tools or platforms to build &amp;amp; host small static or interactive web experiences. There are plenty of platforms out there for building WYSIWYG community sites, or e-Fronts for small businesses. With the wave of vibe-coding there are now an expanded set of paths that include a wider set of cloud platforms. One thing I am sure of is that there is no best-for-all answer in any technology domain.&lt;/p&gt;</description></item><item><title>Codifier in Chief</title><link>https://iguessthatworks.com/posts/05-2026/codifier-in-chief/</link><pubDate>Thu, 07 May 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2026/codifier-in-chief/</guid><description>
&lt;p&gt;One nit-picky side-effect of the surge of AI &amp;amp; Hype Train that causes my brain flutters, is the speed at which terms can become meaningless. A few months ago I had been tossing around Orchestrator like it was the bridge from here to anywhere we wanted to go. It did meaningfully capture the way I felt knowledge work was shifting, and it has a sense of authority and control. It brings in the concepts of &lt;a href="https://www.courtesymasters.com/insights/anthropic-human-judgement"&gt;Judgement&lt;/a&gt; or &lt;a href="https://www-cdn.anthropic.com/d8ba4eda6eed65f193be549d49385006de8b7119.pdf"&gt;Discernment&lt;/a&gt; from Anthropic's 4Ds.&lt;/p&gt;</description></item><item><title>How You Do Anything</title><link>https://iguessthatworks.com/posts/05-2026/doing/</link><pubDate>Wed, 06 May 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2026/doing/</guid><description>
&lt;p&gt;How you do anything is how you do everything. As a parent I find myself saying that quite a bit. I put on my stern lecture-y dad face and always start with a slightly puzzled sounding &amp;quot;You know…&amp;quot;. I mean it too; it's been my experience that if I let myself cut a corner even just a few times, I'll probably end up making that my standard approach.&lt;/p&gt;
&lt;p&gt;Of course I'm better at giving vs following when it comes to advice. I've always been a tinkerer, I make lots of little IOT apps. I create simple web based games to see how different libraries work. I just generally like to play with code, but I almost never approach this work the same way I do when I'm building out something professionally.&lt;/p&gt;</description></item><item><title>Agentic Build Learnings</title><link>https://iguessthatworks.com/posts/05-2026/agentic-build-learnings/</link><pubDate>Tue, 05 May 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2026/agentic-build-learnings/</guid><description>
&lt;p&gt;One of my goals during this unplanned career reset is to build more depth around what cloud capabilities make the most sense for a given challenge. Like most people, I have tools that I know work, so I go to them by default, but as I now have time I want to explore a bit more.&lt;/p&gt;
&lt;p&gt;For inspiration I took a look at an experience I enjoyed using with my kids. &lt;a href="https://portland.biketag.org"&gt;Biketag.org&lt;/a&gt; — I liked the experience of exploring, and I'm always game for a bike ride. I took this basic concept of linking photos, and stripped it down to an experience where users upload a photo of a place with a short description of why they love it. Each subsequent photo has to have a description that has some contextual overlap. It keeps the focus on being outside, but allows for a broader connectivity. You can try it at &lt;a href="https://localmatal.com"&gt;localmatal.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Is It Still Fun?</title><link>https://iguessthatworks.com/posts/05-2026/is-it-still-fun/</link><pubDate>Mon, 04 May 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2026/is-it-still-fun/</guid><description>
&lt;p&gt;I’ve had a few conversations over the past week that circled around the shifting or diminishing rewards of being a developer in the age of agents. If the fun of coding &amp;amp; debugging is shifted into agent loops, what’s the rewarding part of the job now? Answers varied, but themes like&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“I now have time for everything else...”&lt;/li&gt;
&lt;li&gt;“It’s like being in a library, I get to read, study, adapt and relearn everything every day...”&lt;/li&gt;
&lt;li&gt;“I don’t exactly know, is it going to be fun again…”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;From my perspective, I don’t think that AI will replace my engineering capabilities, at least not yet. I may be naive, but it still takes at least some engineering skill to build a pipeline for cranking out software that is production ready. Then again creating code is not really the value I think a good engineer, or engineering leader brings to the job.&lt;/p&gt;</description></item><item><title>Day n* of What's Next</title><link>https://iguessthatworks.com/posts/05-2026/day-5-whats-next/</link><pubDate>Sat, 02 May 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2026/day-5-whats-next/</guid><description>
&lt;p&gt;Day n* of what's next.&lt;/p&gt;
&lt;p&gt;I'm abandoning the ordinal approach. The next post will just be what's-next, and this is the transition.&lt;/p&gt;
&lt;p&gt;Today it's Why Nike? How did I end up there? What made it a place I wanted to be? Why did I stay so long?&lt;/p&gt;
&lt;p&gt;In truth that's a novella with self-discovery, but there are 2 key factors that I know I want to consider as part of what's next.&lt;/p&gt;</description></item><item><title>Day 4 of What's Next</title><link>https://iguessthatworks.com/posts/05-2026/day-4-whats-next/</link><pubDate>Fri, 01 May 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2026/day-4-whats-next/</guid><description>
&lt;p&gt;Day 4 of what's next. The world of the Resume.&lt;/p&gt;
&lt;p&gt;It's daunting for most of us. Spartan vs Overstuffed. Vintage MSWord layout vs Markdown. Tailored per application vs focused on what you're looking for. There are services of course, there's Claude, there's a myriad of ways to approach this question.&lt;/p&gt;
&lt;p&gt;When I've been on the hiring side and a resume makes it to my hands, I'm mostly interested in what kinds of questions it might generate. Topics that I would want to chat through with a candidate in person. I understand that a resume can be part of the ticket that gets you on the ride, but for me I find it critical to hear someone talk me through what they have done, and more importantly what they want to do.&lt;/p&gt;</description></item><item><title>Day 3 of What's Next</title><link>https://iguessthatworks.com/posts/04-2026/day-3-whats-next/</link><pubDate>Thu, 30 Apr 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/04-2026/day-3-whats-next/</guid><description>
&lt;p&gt;Day 3 of what's next; figuring out what I'm good at.&lt;/p&gt;
&lt;figure class="caption_center"&gt;
&lt;picture&gt;
&lt;img src="https://iguessthatworks.com/images/day-3-whats-next/coldfusion-4.5.jpg" alt="Mastering ColdFusion 4.5 book cover" title="Knowledge spike: ColdFusion 4.5" class="image_center" /&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;p&gt;Like many of my peers I didn't know what I wanted to do when I grew up, and I didn't understand what &amp;quot;my skill&amp;quot; was. Looking back I see a trend of being pretty good at a lot of different things. Often I fall into the role of being a bridge — I can learn enough about a topic to have a real connection with someone who's an expert, and then translate their knowledge to someone who's an expert in a completely different field.&lt;/p&gt;</description></item><item><title>Day 2 of What's Next</title><link>https://iguessthatworks.com/posts/04-2026/day-2-whats-next/</link><pubDate>Wed, 29 Apr 2026 07:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/04-2026/day-2-whats-next/</guid><description>
&lt;p&gt;Day 2 of what's next. Gratitude is the word of the day, but there's also some career stew steeping today. Like everyone in technology I'm continually re-learning my job as Agentic swarms have shifted the way we work. At base I think software engineering is still the codification of a process. It's taking decision trees, or actions and creating digital stand-ins that allow us to work faster and broader.&lt;/p&gt;
&lt;p&gt;Agents have shifted the way we understand the problem, accelerate the definition of the landscape and ultimately commodify&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; the encoding of a solution, but the fundamental flow is still the same. Agents exist as both toys and tools. The name Cronagotchi — that I really want to stick — is what I call scheduled atomic agents that require a steady diet of tokens to thrive. These Cronagotchi are only a tool if they can be connected back to a fundamental problem or opportunity, otherwise they're fun pets that entertain but don't create measurable value.&lt;/p&gt;</description></item><item><title>Day 1 of What's Next</title><link>https://iguessthatworks.com/posts/04-2026/day-1-whats-next/</link><pubDate>Tue, 28 Apr 2026 10:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/04-2026/day-1-whats-next/</guid><description>
&lt;p&gt;Day 1 of what's next. There have been a lot of names over the last 24 hours, and I know there will be more today. I'm most surprised that I feel just about the same as when I have been on the other side of these reductions. I'm irrationally sure that I'll figure this out, and I want everyone else who now sits on the outside of the berm with me to feel the same way. Yes there's ignorance, arrogance and privilege all wrapped up in that feeling, but It's something that has propelled me continuously forward.&lt;/p&gt;</description></item><item><title>Today Was My Last Day at Nike</title><link>https://iguessthatworks.com/posts/04-2026/today-last-day-nike/</link><pubDate>Mon, 27 Apr 2026 10:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/04-2026/today-last-day-nike/</guid><description>
&lt;p&gt;Today was my last day at Nike. There is no author who would have written my story as it has come to pass. The list of &amp;quot;and then this&amp;quot;s is long, and at every inflection; whether up or down I have been incredibly lucky to meet those who challenged, those who nurtured and those who have inspired me.&lt;/p&gt;
&lt;p&gt;Today I have been given the opportunity to take my accumulated learnings and find the next puzzle. I will look back at my Nike time with incredible fondness. It was the ideal proving ground for me to take my jumble of skills and create a career out of solving the challenges that found their way to me. 18 years of Just Do It, and now, here's to the next incredible list of &amp;quot;and this&amp;quot;s.&lt;/p&gt;</description></item><item><title>IProvider</title><link>https://iguessthatworks.com/posts/03-2025/i-provider/</link><pubDate>Tue, 11 Mar 2025 06:00:00 -0800</pubDate><guid>https://iguessthatworks.com/posts/03-2025/i-provider/</guid><description>
&lt;h1 id="im-right-until-im-not"&gt;I'm Right until I'm Not&lt;/h1&gt;
&lt;h2 id="binders-of-interfaces"&gt;Binders of Interfaces&lt;/h2&gt;
&lt;p&gt;The provider pattern, at least what used to be the provider pattern was an approach that consumed far t0o many of the limited key strokes that I will press in my life. Mountains of &lt;code&gt;IDBProvider&lt;/code&gt;, &lt;code&gt;IConnectionProvider&lt;/code&gt;, &lt;code&gt;IIOProvider&lt;/code&gt;, &lt;code&gt;ILoggingProvider&lt;/code&gt; and other unnecessarily redundant boilerplate files that one had to key in before the magic of CoPilot generated projects.&lt;/p&gt;
&lt;p&gt;The idea was sound, I mean what if we wanted to switch from Oracle to MSSQL, think of all the refactoring we would have to do. This is classic &lt;a href="https://wiki.c2.com/?PrematureOptimization"&gt;premature optimization&lt;/a&gt;. There were exactly 0 times in my professional career where I needed to shift a DB without also incurring other major refactors.&lt;/p&gt;</description></item><item><title>Go Play</title><link>https://iguessthatworks.com/posts/02-2025/go-play/</link><pubDate>Tue, 25 Feb 2025 06:00:00 -0800</pubDate><guid>https://iguessthatworks.com/posts/02-2025/go-play/</guid><description>
&lt;h1 id="whats-in-a-mistake"&gt;What's in a Mistake?&lt;/h1&gt;
&lt;h2 id="repl"&gt;REPL&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://go.dev/play/p/TaAQ_1Y2f9U"&gt;go.dev&lt;/a&gt; is a pseudo &amp;quot;read, eval, print, loop&amp;quot; (REPL) environment that allows you to quickly jot out some Go and execute it. REPLs can be helpful when you are just starting to work with a new language. They let you experiment with the language itself without the overhead of creating a full project.&lt;/p&gt;
&lt;p&gt;True &lt;a href="https://iguessthatworks.com/posts/02-2025/go-pilot/"&gt;CoPilot&lt;/a&gt; and it's peers have lessened the burden of creating a new project, but it can still be helpful to just play without having to worry about installing any libraries or packages that you'll later have to unwind. Half the reason I end up getting a new laptop every few years is to avoid having to undo all of the let-me-just-brew this new toy and see what it does.&lt;/p&gt;</description></item><item><title>Go-Pilot?</title><link>https://iguessthatworks.com/posts/02-2025/go-pilot/</link><pubDate>Sun, 23 Feb 2025 06:00:00 -0800</pubDate><guid>https://iguessthatworks.com/posts/02-2025/go-pilot/</guid><description>
&lt;h1 id="okay-go"&gt;Okay GO&lt;/h1&gt;
&lt;h2 id="finding-footing"&gt;Finding Footing&lt;/h2&gt;
&lt;p&gt;I was recently given the opportunity to &lt;a href="https://go.dev/doc/tutorial/create-module"&gt;create a Go Module&lt;/a&gt;. Go, is one of those languages I've encountered enough to be able to read and debug if I need to but I've never had to put together something from an empty folder.&lt;/p&gt;
&lt;p&gt;Early in my career, with this kind of challenge I would have turned to a trusty friend like &lt;a href="https://workbench.cadenhead.org/go/java21days/"&gt;&amp;quot;Sams Teach Yourself Java in 21 Days&amp;quot;&lt;/a&gt;. Then, as search engines became more prominent I would have cobbled together code examples and articles like &lt;a href="https://learn.microsoft.com/en-us/sql/relational-databases/stored-procedures/create-a-stored-procedure?view=sql-server-ver16"&gt;&amp;quot;Example T-SQL Stored Procedures&amp;quot;&lt;/a&gt; to scrape together enough knowledge. When GitHub started it's rise to the behemoth that it is today, I would have found example repos that I could model mine after; as well as how to do &amp;quot;y&amp;quot; in language &amp;quot;z&amp;quot; examples.&lt;/p&gt;</description></item><item><title>Sidebar x004 - Did I Now?</title><link>https://iguessthatworks.com/posts/07-2024/sidebar-x004/</link><pubDate>Wed, 17 Jul 2024 20:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/07-2024/sidebar-x004/</guid><description>
&lt;h1 id="pi-baking-temp-65c"&gt;Pi Baking Temp 65°C&lt;/h1&gt;
&lt;h2 id="hot"&gt;Hot!&lt;/h2&gt;
&lt;figure class="caption_center"&gt;
&lt;picture&gt;
&lt;img src="https://iguessthatworks.com/images/sidebar-x004/coretemp.png" alt="Web page showing the 52°6 Celsius CPU temperature" title="CPU Temp" class="image_center" /&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;p&gt;This really isn't about &lt;a href="https://iguessthatworks.com/posts/05-2024/aqi-everywhere/"&gt;AQI Everywhere&lt;/a&gt;, it's not really even about JavaScript or Services. We did have a bit of a heatwave last week, and I did spend some time thinking it would be nice to have a quick way to check the &lt;em&gt;coretemp&lt;/em&gt; on my outside AQI monitor.&lt;/p&gt;
&lt;p&gt;I did make a new basic &lt;a href="https://github.com/jmayeur/outdoor-aqi/blob/main/web/coretemp.html"&gt;web page&lt;/a&gt; that shows the coretemp without ssh-ing into the Raspberry Pi. I spent a little time learning about &lt;a href="https://linuxcommandlibrary.com/man/vcgencmd"&gt;vcgencmd&lt;/a&gt;. I'd used it in the past, but like many things I'd misplaced my familiarity with it.&lt;/p&gt;</description></item><item><title>Sidebar x003 - Who is This for?</title><link>https://iguessthatworks.com/posts/06-2024/sidebar-x003/</link><pubDate>Sun, 09 Jun 2024 20:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/06-2024/sidebar-x003/</guid><description>
&lt;h1 id="can-i-help-you"&gt;Can I Help You?&lt;/h1&gt;
&lt;h2 id="drive-time"&gt;Drive Time&lt;/h2&gt;
&lt;p&gt;A question that I end up spending a lot of time with is, &amp;quot;Who wants this?&amp;quot; Both inside and outside of a work context. I find myself circling this quandary. Even for basic things, like grilling up some food for a party. It's great that I have stacks of burgers, brats, veggie dogs, corn; etc. but if I can't figure out who wants what I'm probably going to end up wasting a bunch of food. Waste is bad, not just for food, but time, people, and resources are expensive to waste. When I'm doing something I want put as much of the input as possible directly into the output.&lt;/p&gt;</description></item><item><title>Update to the latest AQI ranges</title><link>https://iguessthatworks.com/posts/06-2024/aqi-calcutation-update/</link><pubDate>Sat, 08 Jun 2024 08:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/06-2024/aqi-calcutation-update/</guid><description>
&lt;h1 id="is-that-right"&gt;Is That Right&lt;/h1&gt;
&lt;figure class="caption_center"&gt;
&lt;picture&gt;
&lt;img src="https://iguessthatworks.com/images/aqi-update/out_of_range.png" alt="The RaspberryPi powered AQI visualization showing a inaccurate AQI of 666" title="Devil&amp;#39;s Range" class="image_center" /&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;h2 id="whats-changing"&gt;What's Changing&lt;/h2&gt;
&lt;p&gt;As I noted in the &lt;a href="https://iguessthatworks.com/posts/05-2024/aqi-everywhere/"&gt;AQI Everywhere&lt;/a&gt; post the forum where I had sourced my current AQI &lt;a href="https://forum.airnowtech.org/t/the-aqi-equation-2015-obsolete-on-may-6th-2024/169"&gt;calculation&lt;/a&gt; had indicated that it was now obsolete, and instead pointed to an &lt;a href="https://forum.airnowtech.org/t/the-aqi-equation-2024-valid-beginning-may-6th-2024/453"&gt;updated calculation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After walking though the update post, it appeared that the only change was in μg/m3 ranges for each &lt;a href="https://www.airnow.gov/aqi/aqi-basics/"&gt;AQI level&lt;/a&gt;. Since monitor keys of PM2.5 I had to compare the first (obsolete) set of ranges with the second (updated) ranges and update the calculation code accordingly.&lt;/p&gt;</description></item><item><title>BME280 Temp &amp; Humidity Sensor</title><link>https://iguessthatworks.com/posts/06-2024/bme280/</link><pubDate>Mon, 03 Jun 2024 08:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/06-2024/bme280/</guid><description>
&lt;h1 id="being-sensible"&gt;Being Sensible&lt;/h1&gt;
&lt;h2 id="dictionary"&gt;Dictionary&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;term&lt;/th&gt;
&lt;th&gt;definition&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.flux.ai/p/blog/raspberry-pi-pinouts-a-comprehensive-guide"&gt;GPIO&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;General Purpose Input/Output pins&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://learn.sparkfun.com/tutorials/i2c/all"&gt;I2C&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Inter-Integrated Circuit Protocol - communication protocol for multiple peripherals to communicate with a single controller&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://learn.sparkfun.com/tutorials/serial-peripheral-interface-spi/all"&gt;SPI&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Serial Peripheral Interface - bus to send data between peripherals and a microcontroller&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://docs.arduino.cc/learn/electronics/power-pins/"&gt;VIN&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Voltage In - Allows for a 5V-12V DC input (+), and regulates it down to the required 3V3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://docs.arduino.cc/learn/microcontrollers/5v-3v3/"&gt;3V3&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;3.3V DC power input (+)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.utmel.com/blog/categories/powersupply/what-is-gnd-in-a-circuit"&gt;GND&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Power Ground (-), also the 0V reference in a digital 0V/1V circuit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://docs.arduino.cc/learn/communication/spi/"&gt;SCK&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Serial Clock - signals the microntroller to synchronize data transmission&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.sparkfun.com/spi_signal_names"&gt;SDO&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Serial Data Out - pipes the sensor data out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.sparkfun.com/spi_signal_names"&gt;SDI&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Serial Data In - pipes data in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.sparkfun.com/spi_signal_names"&gt;CS&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Chip Select - turns the peripheral on&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.flux.ai/p/blog/raspberry-pi-pinouts-a-comprehensive-guide"&gt;SDA&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Serial Data Line on the Raspberry PI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.flux.ai/p/blog/raspberry-pi-pinouts-a-comprehensive-guide"&gt;SCL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Serial Clock Line on the Raspberry PI&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="the-wire-up"&gt;The Wire Up&lt;/h2&gt;
&lt;p&gt;In this case I'm using the &lt;a href="https://www.adafruit.com/product/2652"&gt;Adafruit BME280 Sensor&lt;/a&gt; to read the Temperature, Barometric Pressure &amp;amp; Humidity. I'll be reading that data using the &lt;a href="https://learn.sparkfun.com/tutorials/i2c/all"&gt;I2C&lt;/a&gt; capabilities of the RaspberryPi's GPIO pins. This &lt;a href="https://projects.raspberrypi.org/en/projects/build-your-own-weather-station/2"&gt;project&lt;/a&gt; has a good wiring diagram, and writeup on how to connect the BME280 to the RaspberryPi.&lt;/p&gt;</description></item><item><title>PMS5003</title><link>https://iguessthatworks.com/posts/06-2024/pms5003/</link><pubDate>Sun, 02 Jun 2024 11:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/06-2024/pms5003/</guid><description>
&lt;h1 id="the-sniffer"&gt;The Sniffer&lt;/h1&gt;
&lt;h2 id="where-we-end-up"&gt;Where we end up&lt;/h2&gt;
&lt;p&gt;The goal is to put the data on display. I wanted an easy way to have a quick view into how the AQI is fairing both indoors &amp;amp; outdoors. Even though this is a simplified view of PM2.5 AQI and doesn't roll in Ozone or NH3, it's still a nice quick check on what's going on. For this post I'll cover the muscle of one of these sensors. The &lt;a href="https://blog.attuneiot.com/particulate-matter-sensors"&gt;Particulate Matter Sensor&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>AQI Everywhere</title><link>https://iguessthatworks.com/posts/05-2024/aqi-everywhere/</link><pubDate>Fri, 31 May 2024 11:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2024/aqi-everywhere/</guid><description>
&lt;h1 id="measured-breath"&gt;Measured Breath&lt;/h1&gt;
&lt;h2 id="hobby-horses"&gt;Hobby Horses&lt;/h2&gt;
&lt;p&gt;I'm a hobbyist at best when it comes to &lt;a href="https://www.raspberrypi.com"&gt;Raspberry Pi&lt;/a&gt;. I have a dozen or so doing various tasks around the house from a &lt;a href="https://retropie.org.uk"&gt;RetroPie&lt;/a&gt; to play &lt;a href="https://en.wikipedia.org/wiki/Duke_Nukem"&gt;Duke Nukem&lt;/a&gt; to a &lt;a href="https://pi-hole.net"&gt;PiHole&lt;/a&gt; to limit the prying eyes of the web-ad-media-muck, to basic things like a clock/message board, hubs for smart-ish devices like rooted &lt;a href="https://github.com/openmiko/openmiko"&gt;OpenMiko Cameras&lt;/a&gt;, or photo frames.&lt;/p&gt;
&lt;p&gt;I've had a lot of fun just goofing around with the Pi's and &lt;a href="https://www.arduino.cc"&gt;Arduino&lt;/a&gt;, and ESP8266 boards, but the most interesting thing for me has been AQI Sensors. I got starting with the &lt;a href="https://shop.pimoroni.com/products/enviro?variant=31155658457171"&gt;Enviro+&lt;/a&gt; and a &lt;a href="https://www.adafruit.com/product/3708"&gt;PiZero WH&lt;/a&gt; and most importantly a &lt;a href="https://www.adafruit.com/product/3686"&gt;Plantower PMS5003&lt;/a&gt; laser Particulate Matter Sensor.&lt;/p&gt;</description></item><item><title>Accessibility 100</title><link>https://iguessthatworks.com/posts/05-2024/getting-to-100/</link><pubDate>Wed, 29 May 2024 17:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2024/getting-to-100/</guid><description>
&lt;h1 id="so-close"&gt;So Close&lt;/h1&gt;
&lt;figure class="caption_center"&gt;
&lt;picture&gt;
&lt;img src="https://iguessthatworks.com/images/getting-to-100/start-score.png" alt="Image with Lighthouse Accessibility Score of 96" title="96!" class="image_center" /&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;h2 id="lets-see-if-i-can"&gt;Let's See if I Can&lt;/h2&gt;
&lt;p&gt;Okay not bad, but I'm curious if I can get this to 100. First though I'll cover a bit about how I'm getting these scores. I'm relying on a capability built into the Chrome Dev Tools, &lt;a href="https://developer.chrome.com/docs/lighthouse/overview"&gt;Lighthouse&lt;/a&gt;. In this case I'm choosing to run an Accessibility only scan. I use Dev Tools extensively, but here I'm just focused on Accessibility.&lt;/p&gt;</description></item><item><title>Categories &amp; Series Front Matter</title><link>https://iguessthatworks.com/posts/05-2024/categories-and-series/</link><pubDate>Tue, 28 May 2024 20:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2024/categories-and-series/</guid><description>
&lt;h1 id="more-discovering"&gt;More Discovering&lt;/h1&gt;
&lt;h2 id="the-final-front-matters"&gt;The Final Front Matters&lt;/h2&gt;
&lt;p&gt;Well at least for now. Just to complete the standard set of &lt;a href="https://gohugo.io/content-management/front-matter/"&gt;Front Matter&lt;/a&gt; &amp;quot;discovery&amp;quot; enabled Front Matter bits, and to setup some future work experimenting with &lt;a href="https://gist.github.com/eddiewebb/735feb48f50f0ddd65ae5606a1cb41ae"&gt;on-site search&lt;/a&gt; I'm going to add Categories &amp;amp; Series Front Matter tags where necessary.&lt;/p&gt;
&lt;h2 id="whats-it-look-like"&gt;What's it look like&lt;/h2&gt;
&lt;p&gt;The full set of &lt;a href="https://gohugo.io/content-management/front-matter/"&gt;Front Matter&lt;/a&gt; tags for this page is in the code block below. I'm essentially using the following hierarchy&lt;/p&gt;</description></item><item><title>Abstract Front Matter</title><link>https://iguessthatworks.com/posts/05-2024/what-about-abstract/</link><pubDate>Mon, 27 May 2024 12:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2024/what-about-abstract/</guid><description>
&lt;h1 id="parade-of-params"&gt;Parade of Params&lt;/h1&gt;
&lt;h2 id="what-i-know-and-dont"&gt;What I know and don't&lt;/h2&gt;
&lt;p&gt;In the &lt;a href="https://iguessthatworks.com/posts/05-2024/meta-description/"&gt;previous post&lt;/a&gt; on the description &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta"&gt;meta&lt;/a&gt; tag I walked through how the Keywords, description and author meta tags make it onto the page. There was one last related bit of &lt;a href="https://gohugo.io/content-management/front-matter/#readout"&gt;Front Matter&lt;/a&gt; that I was curious about, the &lt;a href="https://github.com/chipzoller/hugo-clarity/blob/8412edb369414537eabc4de1ecf6f3b8edf70c50/README.md?plain=1#L273"&gt;abstract&lt;/a&gt; param.&lt;/p&gt;
&lt;p&gt;I can see there are 2 &lt;a href="https://github.com/search?q=repo%3Achipzoller%2Fhugo-clarity%20abstract&amp;amp;type=code"&gt;partial templates&lt;/a&gt; that reference the param. It seems like an alternative to the Summary param, but It's not clear to me if I can just delete that from those templates, and get rid of it, or if there is some other potential use for another way to capture the intent of a post.&lt;/p&gt;</description></item><item><title>Meta Description Tags</title><link>https://iguessthatworks.com/posts/05-2024/meta-description/</link><pubDate>Sun, 26 May 2024 14:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2024/meta-description/</guid><description>
&lt;h1 id="what-am-i-saying"&gt;What am I saying&lt;/h1&gt;
&lt;h2 id="why-it-matters"&gt;Why it Matters&lt;/h2&gt;
&lt;p&gt;The description &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta"&gt;meta&lt;/a&gt; tag is another key piece of &lt;a href="https://dev.to/frontend_jedi/creating-web-accessibility-meta-tags-1pcp"&gt;site accessibility&lt;/a&gt;. In fact there are a few meta tags it would be good for me to ensure are populated with meaningful data. `&amp;lt;meta name=&amp;quot;author&amp;quot;..., &amp;lt;meta name=&amp;quot;keywords&amp;quot;...and &amp;lt;meta name=&amp;quot;description&amp;quot;...&amp;quot;. These would all be useful in optimizing everyone's experience on through a site.&lt;/p&gt;
&lt;h2 id="but-first"&gt;But First&lt;/h2&gt;
&lt;p&gt;There are few bits to this that I want to work though. The template that is responsible for handling these meta tags is the &lt;a href="https://github.com/chipzoller/hugo-clarity/blob/master/layouts/partials/opengraph.html"&gt;opengraph.html&lt;/a&gt;, so named because it also generates the &lt;a href="https://ogp.me"&gt;Open Graph Tags&lt;/a&gt; that help make your site more machine interpretable. I won't be covering those in this post, except where they overlap with the meta tags. My main focus is to see if I can practice making a page as &lt;a href="https://www.afb.org/blindness-and-low-vision/using-technology/assistive-technology-products/screen-readers"&gt;screen reader&lt;/a&gt; friendly as possible.&lt;/p&gt;</description></item><item><title>Sidebar x002 - Play</title><link>https://iguessthatworks.com/posts/05-2024/sidebar-x002/</link><pubDate>Sat, 25 May 2024 20:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2024/sidebar-x002/</guid><description>
&lt;h1 id="living-in-the-toyshop"&gt;Living in the Toyshop&lt;/h1&gt;
&lt;p&gt;Like most people I enjoy winning, which means in theory, I enjoy playing. I sometimes call what I do tinkering, but really I'm just trying to understand what things I can do well enough to see the possibility of winning. Two things I've come to understand about how I approach the world center on this concept of playing to win.&lt;/p&gt;
&lt;p&gt;A) I am very quick to dismiss the value of something I can't see a way to win with. I have to constantly check myself. Am I bucketing something into won't do because I don't yet have the basic skills to at least play passably, or have I truly reasoned out why there doesn't seem to be a benefit to putting effort into it.&lt;/p&gt;</description></item><item><title>Centering an Image</title><link>https://iguessthatworks.com/posts/05-2024/centering-an-image/</link><pubDate>Fri, 24 May 2024 17:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2024/centering-an-image/</guid><description>
Learning how to center an image with Hugo.</description></item><item><title>Accessible Font Contrast Part 2</title><link>https://iguessthatworks.com/posts/05-2024/accessibile-font-contrast-part-2/</link><pubDate>Thu, 23 May 2024 16:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2024/accessibile-font-contrast-part-2/</guid><description>
&lt;h1 id="its-all-about-the-patches"&gt;It's all about the Patches&lt;/h1&gt;
&lt;h2 id="themes-sass-and-transpilation"&gt;Themes, SASS and Transpilation&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://sass-lang.com"&gt;SASS&lt;/a&gt; is a &lt;a href="https://martinfowler.com/dsl.html"&gt;DSL&lt;/a&gt; that &lt;a href="https://shadowsmith.com/thoughts/setting-up-a-sass-scss-transpiler"&gt;transpiles&lt;/a&gt; into CSS. (DSLs really are everywhere.) In this case there is a variable &lt;a href="https://github.com/chipzoller/hugo-clarity/blob/master/assets/sass/_variables.sass#L5"&gt;$theme&lt;/a&gt; and an &lt;a href="https://github.com/chipzoller/hugo-clarity/blob/master/assets/sass/_components.sass#L188C23-L188C41"&gt;rgba function&lt;/a&gt; that come together to transpile into a &lt;code&gt;button_translucent&lt;/code&gt; css class. This class uses the &lt;code&gt;$theme&lt;/code&gt; as the foreground color (font color) and an alpha translucent variant of the &lt;code&gt;$theme&lt;/code&gt; as the background color for the non-accessible tag links.&lt;/p&gt;
&lt;p&gt;I'm not going to go too deep into understand what SASS does at this point, but you can infer the final transpiled class name from the _components.sass file. Beneath the &lt;code&gt;.button&lt;/code&gt; definition we find the the &lt;code&gt;&amp;amp;_translucent&lt;/code&gt; definition. That will be transpiled into the &lt;code&gt;button_translucent&lt;/code&gt; css class.&lt;/p&gt;</description></item><item><title>Accessible Font Contrast Part 1</title><link>https://iguessthatworks.com/posts/05-2024/accessibile-font-contrast-part-1/</link><pubDate>Wed, 22 May 2024 17:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2024/accessibile-font-contrast-part-1/</guid><description>
&lt;h1 id="technicolor-high-contrast"&gt;Technicolor High-Contrast&lt;/h1&gt;
&lt;h2 id="first-the-why"&gt;First the Why&lt;/h2&gt;
&lt;p&gt;It's fair to assume that this set of blogs won't get much traffic. Sure I'll dink around with things like SEO, or cross posting on &lt;a href="https://www.linkedin.com/in/jeff-mayeur/"&gt;Linkedin&lt;/a&gt;, but there's too much content for this to get any eyeballs. So for me this goes back to an incident in pre-school.&lt;/p&gt;
&lt;p&gt;It was my first day in &lt;a href="https://www.yelp.com/biz/challenger-school-saratoga-saratoga"&gt;Challenger Preschool&lt;/a&gt;. Many long years ago. After a morning of being read to, experiencing the recess with lots of loud kids, it was time for Art. We were going to make &lt;a href="https://tinkerlab.com/paper-bag-animal-puppets/"&gt;Paper Bag Puppets&lt;/a&gt;. A brown paper bag, some crayons, glue and scissors, it was going to be great. And I kicked some butt. I was the first kid done with their puppet.&lt;/p&gt;</description></item><item><title>A Small Change</title><link>https://iguessthatworks.com/posts/05-2024/a-small-change/</link><pubDate>Tue, 21 May 2024 17:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2024/a-small-change/</guid><description>
&lt;h1 id="everything-is-a-1-point-story"&gt;Everything is a 1 Point Story&lt;/h1&gt;
&lt;h2 id="a-lot-has-been-said"&gt;A lot has been said&lt;/h2&gt;
&lt;p&gt;Many smarter folks than I have waxed on about the minefield that is Estimation. &lt;a href="https://martinfowler.com/bliki/PurposeOfEstimation.html"&gt;Martin Fowler&lt;/a&gt; and &lt;a href="https://skamille.medium.com/yes-virginia-you-can-estimate-that-e33303eec9cf"&gt;Camille Fournier&lt;/a&gt; have thoughts for more useful than I on the topic. Google and Reddit will take you places as well.&lt;/p&gt;
&lt;p&gt;Thankfully I'm no longer in a professional role where estimation is anything other than - give me the Fiscal this will land. Even when I was closer to the daily grind, I often found creative ways to avoid providing anything close to a timeline. Not that I see estimates as good or bad necessarily; rather for me, the cells in my head would most often lock onto &amp;quot;okay how am I going to do this&amp;quot; well before I got to how, how much or how to sequence...&lt;/p&gt;</description></item><item><title>Sidebar x001 - On Learning</title><link>https://iguessthatworks.com/posts/05-2024/sidebar-x001/</link><pubDate>Mon, 20 May 2024 19:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2024/sidebar-x001/</guid><description>
&lt;h1 id="brief"&gt;Brief&lt;/h1&gt;
&lt;p&gt;Like most people, I'm mostly wrong. I operate under the assumption that if I'm lucky I'm right 25% of time, pretty close another 25%, not terribly wrong 25% more, and holy hell how did you come up with that for the biggest 25%. I'm not really a fan of the waning move-fast-and-break-things mantra, but I know I have to be okay with getting things wrong.&lt;/p&gt;
&lt;h2 id="a-great-weakness"&gt;A Great Weakness&lt;/h2&gt;
&lt;p&gt;I'm someone who's nature it is to be terrified of being wrong. There are a few roots to that tree. There's base embarrassment, it's not fun when you think you're shining bright to have someone or something rub the glow off.&lt;/p&gt;</description></item><item><title>Summing it up</title><link>https://iguessthatworks.com/posts/05-2024/summing-it-up/</link><pubDate>Sun, 19 May 2024 20:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2024/summing-it-up/</guid><description>
&lt;h1 id="sum-it-up-and-be-quick"&gt;Sum it up, and be quick.&lt;/h1&gt;
&lt;h2 id="the-basics"&gt;The Basics&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/html/template"&gt;Go HTML Template&lt;/a&gt; - This is the basic language that is used to inject dynamic content and logic into an otherwise static HTML Document&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gohugo.io/templates/"&gt;Hugo Templates&lt;/a&gt; - Hugo uses the &lt;a href="https://pkg.go.dev/html/template"&gt;Go HTML Template&lt;/a&gt; to structure the a site, from the home page, to sub pages, to navigation, all of the facets of a Huge Site are driven through these templates&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/chipzoller/hugo-clarity/blob/master/layouts/partials/excerpt.html"&gt;Hugo Clarity's Excerpt&lt;/a&gt; - This is the template I'm interested in, it renders the &amp;quot;Summary&amp;quot; that shows up on the root of this blog.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="a-summary-example"&gt;A Summary Example&lt;/h2&gt;
&lt;p&gt;There are definitely times when I will want to explicitly write the summary for a given post, but I do like automated things. The problem for me was that the autogenerated summary was pulling in the first few words from the post including the titles. The summary for the &lt;a href="https://iguessthatworks.com/posts/it-starts-here/"&gt;It Starts Here&lt;/a&gt; post reads &amp;quot;Hi, I'm Jeff What This site exists for me to collect...&amp;quot;. You can read past the titles, but I wasn't super pleased with it. Something had to be done.&lt;/p&gt;</description></item><item><title>Where Is Hugo</title><link>https://iguessthatworks.com/posts/05-2024/where-is-hugo/</link><pubDate>Sun, 19 May 2024 09:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2024/where-is-hugo/</guid><description>
Why a TXT DNS Record is both necessary and fun when it comes to using a custom domain name for this blog</description></item><item><title>It Starts Here</title><link>https://iguessthatworks.com/posts/05-2024/it-starts-here/</link><pubDate>Sat, 18 May 2024 20:00:00 -0700</pubDate><guid>https://iguessthatworks.com/posts/05-2024/it-starts-here/</guid><description>
&lt;h1 id="hi-im-jeff"&gt;Hi, I'm Jeff&lt;/h1&gt;
&lt;h2 id="what"&gt;What&lt;/h2&gt;
&lt;p&gt;This site exists mostly for me collect things as they fly by. I'm not particularly expert at anything, but I've come to truly enjoy a wide array of &amp;quot;huh; what abouts...&amp;quot; where I take the things I've seen before, hone them, and fit them into the future. Maybe this will only be useful for me. Maybe there's something that can be borrowed and applied by others. In either case it gives me another tool to spelunk through my memory for tidbits I might want to repurpose.&lt;/p&gt;</description></item><item><title/><link>https://iguessthatworks.com/posts/05-2026/go-fish-design-non-tdd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://iguessthatworks.com/posts/05-2026/go-fish-design-non-tdd/</guid><description>
&lt;h1 id="go-fish--design-document-pseudocode"&gt;Go Fish — Design Document (Pseudocode)&lt;/h1&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;The game is split into four logical modules: &lt;strong&gt;Card&lt;/strong&gt;, &lt;strong&gt;Player&lt;/strong&gt;, &lt;strong&gt;Game&lt;/strong&gt;, and &lt;strong&gt;Main&lt;/strong&gt;. Each module owns a clear slice of responsibility. The design supports 2–6 players (human and/or AI) in a CLI environment.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="module-card"&gt;Module: Card&lt;/h2&gt;
&lt;p&gt;Owns the raw building blocks — suits, ranks, individual cards, the deck, and a player's hand.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="enum-suit"&gt;Enum: Suit&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;Suit = { Spades, Hearts, Diamonds, Clubs }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="enum-rank"&gt;Enum: Rank&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;Rank = { Ace, Two, Three, Four, Five, Six, Seven,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt; Eight, Nine, Ten, Jack, Queen, King }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h3 id="object-card"&gt;Object: Card&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;Card
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt; properties:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt; rank : Rank
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt; suit : Suit
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt; methods:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt; toString() → &amp;#34;Ace of Spades&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;8&lt;/span&gt;&lt;span class="cl"&gt; toShortString() → &amp;#34;A♠&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h3 id="object-deck"&gt;Object: Deck&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;Deck
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt; properties:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; cards : list of Card
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; methods:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; create()
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; -- build one Card for every (Rank, Suit) combination → 52 cards total
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; shuffle()
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; -- randomize card order in place
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; deal(n) → list of Card
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; -- remove and return the top n cards
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; -- error if fewer than n cards remain
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; drawOne() → Card or null
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; -- remove and return the top card
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; -- return null if deck is empty
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; size() → number
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; isEmpty() → boolean
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h3 id="object-hand"&gt;Object: Hand&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;Hand
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt; properties:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; cards : list of Card
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; methods:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; add(cards)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; -- append one or more cards to the hand
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; hasRank(rank) → boolean
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; -- return true if at least one card of this rank exists
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; takeByRank(rank) → list of Card
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; -- remove and return all cards matching rank
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; collectBooks() → list of Rank
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; -- find every rank that appears exactly 4 times
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; -- remove those cards from the hand
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; -- return the list of completed ranks
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; size() → number
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; isEmpty() → boolean
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; toString() → human-readable card list
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="module-player"&gt;Module: Player&lt;/h2&gt;
&lt;p&gt;Manages player identity, their hand, their completed books, and AI decision-making.&lt;/p&gt;</description></item><item><title/><link>https://iguessthatworks.com/posts/05-2026/go-fish-design-tdd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://iguessthatworks.com/posts/05-2026/go-fish-design-tdd/</guid><description>
&lt;h1 id="go-fish--tdd-class-design"&gt;Go Fish — TDD Class Design&lt;/h1&gt;
&lt;p&gt;Inspired by the Bowling Game Kata approach: let the tests drive you toward the simplest structure
that works. Start with the &lt;code&gt;Game&lt;/code&gt; and let &lt;code&gt;Card&lt;/code&gt;, &lt;code&gt;Deck&lt;/code&gt;, &lt;code&gt;Hand&lt;/code&gt;, and &lt;code&gt;Player&lt;/code&gt; emerge only when
the tests demand them.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="design-philosophy-kata-style"&gt;Design Philosophy (Kata-Style)&lt;/h2&gt;
&lt;p&gt;Just like the Bowling Kata resists the temptation to model &lt;code&gt;Frame&lt;/code&gt; as a class, resist modeling
every Go Fish noun up front. The test sequence below reveals which structs earn their existence.&lt;/p&gt;</description></item></channel></rss>