<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Thoughts on CodeGoalie</title><link>https://codegoalie.com/categories/thoughts/</link><description>Recent content in Thoughts on CodeGoalie</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Mon, 30 Mar 2026 07:21:16 -0400</lastBuildDate><atom:link href="https://codegoalie.com/categories/thoughts/index.xml" rel="self" type="application/rss+xml"/><item><title>Agents Calm Down</title><link>https://codegoalie.com/posts/agents-calm-down/</link><pubDate>Mon, 30 Mar 2026 07:21:16 -0400</pubDate><guid>https://codegoalie.com/posts/agents-calm-down/</guid><description>&lt;p>Agentic coding harnesses are violating the unix philosophy and trying to become
the &lt;em>everything app&lt;/em> for coding (and work and personal assistant and so on).&lt;/p>
&lt;h2 id="why-not-build-everything">Why not build everything?&lt;/h2>
&lt;p>Many of the articles I&amp;rsquo;m reading are saying what we&amp;rsquo;ve been saying all along,
&amp;ldquo;writing the code hasn&amp;rsquo;t been the bottleneck.&amp;rdquo; No project was late because
engineers didn&amp;rsquo;t spend enough time sitting at their desks typing code. And now
that writing the code is approaching zero, I think it&amp;rsquo;s more important than ever
to carefully, methodically consider every project and initiative.&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;This feature is not a good fit for coding agents so we aren&amp;rsquo;t going to put
it into our harness.&amp;rdquo;&lt;/p>
&lt;ul>
&lt;li>No AI company ever&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;p>Non-engineering folks have long enjoyed the luxury of engineering being the
bottleneck (not writing code, but review, deploy, integration, etc.) and have
been able to change requirements, goals and targets while we were working. When
we can take a set of requirements and later that afternoon be dev complete&amp;hellip;
Just think about what would have happened if we&amp;rsquo;d implemented verbatim some
of those first draft project proposals?&lt;/p>
&lt;p>I&amp;rsquo;m working on a personal project to upgrade my personal daily task list from a
plain markdown file to use &lt;a href="https://www.rememberthemilk.com/">Remember The Milk&lt;/a>
(the only task tracking app which gets recurring items right, but I digress). I
have a pretty decent idea of what I want. I&amp;rsquo;ve been working in this flow for
over 8 years after all. I&amp;rsquo;m, of course, having an agent write all the code. But
I&amp;rsquo;m going slow. I&amp;rsquo;m carefully considering each feature and more precisely how it
should work than I ever have &lt;em>ahead of time&lt;/em> before. I feel this great
responsibility to move intentionally &lt;strong>because&lt;/strong> I have this great power to push
a button, fold 5 pieces of clothes, turn back to my laptop and have a working
feature.&lt;/p>
&lt;p>To me, LLMs and agents and all of it, from the start, has never been about
getting faster. It&amp;rsquo;s about reducing the &amp;ldquo;manual&amp;rdquo; effort of willing a (software)
thing into existence. As I&amp;rsquo;ve been gaining experience with agents et al, I keep
coming back time and time again to the best practices of the industry: &amp;ldquo;have a
really good and detailed scope doc,&amp;rdquo; &amp;ldquo;compare that to the code and form a
focused implementation plan,&amp;rdquo; &amp;ldquo;break that down into units of work that depend on
each other or can be done in parallel.&amp;rdquo; We always wanted that but it was too
time consuming to do and we relied on each other&amp;rsquo;s existing context. Many
tickets don&amp;rsquo;t have any body description. We just talked about the project scope
in the kick off, but didn&amp;rsquo;t formalize a document. Ironically, the machine is
forcing (and enabling) us to do the things that would have been best all along,
even for humans.&lt;/p>
&lt;h2 id="do-one-thing-well">Do one thing well&lt;/h2>
&lt;p>Time and again the best software is focused and does one thing really well.
That&amp;rsquo;s the unix philosophy. Composability over batteries included. Make a simple
and powerful tool to let those using it combine it with other simple and
powerful tools to make something greater than the sum of the tools themselves.&lt;/p>
&lt;p>These new releases in the agent harnesses are hard to reason about because
many of the new features feel half-baked and not rooted in solving a real
problem. I end up feeling obligated to find use for them. It&amp;rsquo;s FOMO a bit.
&amp;ldquo;Well, if they implemented it and released it, it must be something good. I must
be missing something if I can&amp;rsquo;t find the use case.&amp;rdquo;&lt;/p>
&lt;p>It&amp;rsquo;s hard to face this down. The company worth tens of billions of dollars is
churning out features on the most talked about software of the moment and my gut
is telling me to ignore most of it. I got bored and frustrated really quickly
babysitting the agent. &amp;ldquo;Yes&amp;rdquo; &amp;ldquo;Approve&amp;rdquo; over and over. Same prompt. Same slash
command. Same skill. Tweak it a bit here and there. Now, I&amp;rsquo;m automating it and
running into some longing for more focus on a simple tool that I can work &lt;em>with&lt;/em>
not indefinitely inside of.&lt;/p>
&lt;h2 id="do-less">Do less&lt;/h2>
&lt;p>I don&amp;rsquo;t want to leave on a down note so let&amp;rsquo;s talk solutions. Do less. Make
more. Let&amp;rsquo;s build an ecosystem around this tool. Let&amp;rsquo;s solve the rest of the
SDLC competently. LLMs are a versatile technology and are made even more
powerful with agent harnesses. They aren&amp;rsquo;t a silver bullet either. I love that
we&amp;rsquo;re pushing the envelope of what can these things do. I love that we don&amp;rsquo;t
know yet. It&amp;rsquo;s exciting to be a part of.&lt;/p>
&lt;p>The more I work with agents the more I see how important the &amp;ldquo;old&amp;rdquo; best
practices are. The more pre-planning matters. The more detailed specs matter.
The more nailing down inter-service interacations matter. Start at the
boundaries and work inward on both sides. Hand offs. Metrics. Automated
end-to-end testing. There&amp;rsquo;s nothing new here. It&amp;rsquo;s just compressed and
accelerated; and can be exhausting at times. In this age where we can build
anything, the taste and discipline to not build something matters. I&amp;rsquo;d love to
see that in the tools themselves.&lt;/p>
&lt;p>Happy shipping!&lt;/p>
&lt;p>&amp;ndash; Chris&lt;/p></description></item><item><title>Use Your Noodler</title><link>https://codegoalie.com/posts/2025-05-24-use-your-noodler/</link><pubDate>Sat, 24 May 2025 06:52:56 -0400</pubDate><guid>https://codegoalie.com/posts/2025-05-24-use-your-noodler/</guid><description>&lt;p>A former coworker of mine over 8 years ago put this image into my head that has
never left. He was working as my manager at the time and he had an upcoming
large, foundational shifting feature that he wanted to let me know was coming. He
said &amp;ldquo;Don&amp;rsquo;t do anything right now, but just put this in your noodler and see
what comes out.&amp;rdquo;&lt;/p>
&lt;p>He went on to explain that a former boss of &lt;em>his&lt;/em> introduced the idea of the
noodler to him. Now, I&amp;rsquo;m not your boss (I can confidently say that because I&amp;rsquo;m
no ones boss as of this writing ;) ), but I&amp;rsquo;d still like to share this image
with you that&amp;rsquo;s helped me so much and I&amp;rsquo;ve never been able to shake.&lt;/p>
&lt;p>If you haven&amp;rsquo;t guessed by now, the noodler is the back part of your brain. Back
near the subconscious, it&amp;rsquo;s like a rock tumbler. It&amp;rsquo;s always spinning and
tumbling ideas without conscious effort. You just throw raw stuff into it and
in a few days or so, see what pops out. Sometimes it&amp;rsquo;s just a smoother rock and
sometimes it&amp;rsquo;s a true gem.&lt;/p>
&lt;p>I like this metaphor for a few reasons. First, it&amp;rsquo;s a pretty vivid, concrete
concept. I always imagine that red, kid&amp;rsquo;s science kit version of a rock tumbler
that I always wanted. Now I have one and it&amp;rsquo;s turning half-baked, super
hazy concepts into novel, actionable ideas.&lt;/p>
&lt;p>Second, it&amp;rsquo;s an escape hatch. Do this one easy thing, make progress, done for
the day. Take something off your plate. You can rest easier knowing that
something, somewhere is happening, but you don&amp;rsquo;t need to spend active energy on
it, right now. Wash the dishes and think about the birds outside. Mow the lawn
and listen to that podcast. It&amp;rsquo;s OK. Some other part of you has got this.&lt;/p>
&lt;p>Lastly, it works. Not all the time. But more often than not, something comes to
me and I can make a small step, or a bigger leap. And if it doesn&amp;rsquo;t, typically,
I&amp;rsquo;m no worse off.&lt;/p>
&lt;p>Happy noodling!!&lt;/p>
&lt;p>&amp;ndash; Chris&lt;/p></description></item><item><title>Web Scraping 2.0</title><link>https://codegoalie.com/posts/web-scraping-two-dot-oh/</link><pubDate>Wed, 23 Jun 2021 06:21:51 -0400</pubDate><guid>https://codegoalie.com/posts/web-scraping-two-dot-oh/</guid><description>&lt;p>With the wide adoption of robust front-end frameworks and CSS-in-JS,
traditional methods of targeting xpath or CSS selectors for scraping data from
web pages are becoming ineffective. However, this new paradigm of front-end
development leaves a key opportunity to improve the web scraping experience.&lt;/p>
&lt;p>Having data that&amp;rsquo;s not readily available in an API is something that I&amp;rsquo;ve kind
of become obsessed with over the past year or so. Even with access to
&lt;a href="https://github.com/awesomedata/awesome-public-datasets">public&lt;/a>
&lt;a href="https://github.com/dolthub/dolt">datasets&lt;/a> becoming more and more prevalant, I
still wanted access to data from websites or companies that I use but have no
interest in separating their data from their platform. So, how do you scrape a
React or Angular or other front-end framework app/site? While scraping the data
from the HTML may not be feasible or break constantly, you can use their API.
The same API the front-end uses. However, often these private APIs are resistant
to general use through opaque authentication and authorization mechanisms which
make them more work than it&amp;rsquo;s worth to try and write a traditional API client.&lt;/p>
&lt;h2 id="why-not-both">Why not both?&lt;/h2>
&lt;p>Instead of an either/or approach, a hybrid approach can be used by leveraging
browser automation &lt;em>and&lt;/em> API requests to quickly and reliably get the data we
need. Specifically, executing JS &lt;code>fetch&lt;/code> requests using browser automation tools
(almost all allow arbitrary JS execution in the current &amp;ldquo;page&amp;rdquo;). Parse this
request back into the native automation language (typically JSON string returned
from JS). Bam! You have a pseudo API!&lt;/p>
&lt;p>I&amp;rsquo;ve been very successful in pulling large amounts of data from an actively
scraper resistant environment using this approach. One of the really nice things
is that authentication/authorization for the private API requests is handled
virtually automatically by the browser through cookies.&lt;/p>
&lt;p>Here&amp;rsquo;s a rough outline of the entire process:&lt;/p>
&lt;ol>
&lt;li>Manually go through the web application performing the actions intended to be
automated while watching the network dev tools tab.&lt;/li>
&lt;li>Note any requests of interest.&lt;/li>
&lt;li>Generalize those requests and reverse engineer a subset of the API.&lt;/li>
&lt;li>Begin automation.&lt;/li>
&lt;li>Automate authentication, if necessary (Type creds into login form).&lt;/li>
&lt;li>Evaluate JS on the page to execute the AJAX/XHR/private API requests.&lt;/li>
&lt;li>Parse the returned string into datatypes in your native automation language.&lt;/li>
&lt;li>???&lt;/li>
&lt;li>Profit!!?&lt;/li>
&lt;/ol>
&lt;p>My intuition leads me to believe there are some common patterns here which may
be surfaceable in a library, but my experience isn&amp;rsquo;t quite to the point where I
feel confident providing the right abstractions. But, stay tuned and we&amp;rsquo;ll see
how this idea unfolds.&lt;/p>
&lt;p>Let me know how your experience scraping data from JS heavy web apps goes! I&amp;rsquo;d
love to know if this works for you or if this ends up being more hassle than
it&amp;rsquo;s worth.&lt;/p>
&lt;p>Happy scraping!&lt;/p></description></item></channel></rss>