<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>jed.codes</title><link>https://jed.codes/</link><description>Recent content on jed.codes</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 14 Jul 2026 20:15:11 -0700</lastBuildDate><atom:link href="https://jed.codes/index.xml" rel="self" type="application/rss+xml"/><item><title>Into the AWS Console with the Federation Endpoint</title><link>https://jed.codes/posts/aws-console-federation-endpoint/</link><pubDate>Tue, 14 Jul 2026 20:15:11 -0700</pubDate><guid>https://jed.codes/posts/aws-console-federation-endpoint/</guid><description>&lt;p&gt;&lt;img src="https://jed.codes/images/aws-console-federation-endpoint_hu_3699c690a0f9f1a0.webp" alt="A steampunk wizard at a brass keyboard in a candlelit study. One screen is a terminal reading “$ bin/console lambda” over a glowing blue portal; a floating crystalline frame beside it shows an ornate key sliding into a padlock with the caption “Authenticated: Federation Token Accepted”, topped by a storm cloud shooting lightning. A clockwork owl and potion bottles sit on the desk." width="1408" height="768" loading="lazy" decoding="async"&gt;&lt;/p&gt;
&lt;p&gt;I recently shared how I &lt;a href="https://jed.codes/posts/setting-up-sso-for-your-personal-aws-account/"&gt;set up AWS SSO to manage session access&lt;/a&gt; for development. SSO gives me short-lived credentials on the command line, but there&amp;rsquo;s still a gap: when I want to poke at something in the &lt;em&gt;web&lt;/em&gt; console, I&amp;rsquo;m back to hunting through the AWS sign-in page and picking the right account and role by hand.&lt;/p&gt;</description></item><item><title>Setting Up SSO for Your Personal AWS Account</title><link>https://jed.codes/posts/setting-up-sso-for-your-personal-aws-account/</link><pubDate>Sat, 04 Jul 2026 11:00:23 -0700</pubDate><guid>https://jed.codes/posts/setting-up-sso-for-your-personal-aws-account/</guid><description>&lt;p&gt;I do a fair bit of my personal work in AWS using serverless services. I love deferring long-running services in favor of pay-for-what-you-use pricing; it makes a ton of sense to me, and many of my applications cost less than $1/mo. A gotcha I hear from folks: managing multiple projects under a single AWS account gets challenging, both from a &amp;ldquo;total cost of ownership&amp;rdquo; standpoint and when you want to constrain access to just one project. Having a &lt;strong&gt;Single Sign On (SSO) AWS login&lt;/strong&gt; with multiple profiles is a stepping stone to a simpler AWS experience.&lt;/p&gt;</description></item><item><title>Observable Framework Is Core to My Process</title><link>https://jed.codes/posts/observable-framework-is-core-to-my-process/</link><pubDate>Thu, 02 Jul 2026 15:39:53 -0700</pubDate><guid>https://jed.codes/posts/observable-framework-is-core-to-my-process/</guid><description>&lt;p&gt;&lt;img src="https://jed.codes/images/observable-framework-core-to-my-process_hu_af618db2219f0055.webp" alt="Stylized illustration of the Observable Framework at the center of a data workflow — a glowing hub labeled “Observable Framework” with spokes to “Data Exploration”, “Static Site Generation”, “DuckDB WASM Client”, “LLM-Friendly Workflow”, and “Analysis”; on the right, sample dashboards for XC ski competitor ranking, S3 lifecycle analysis, CloudTrail structured logs, and impact analysis." width="1376" height="768" loading="lazy" decoding="async"&gt;&lt;/p&gt;
&lt;p&gt;One of the first projects I got excited about was &lt;a href="https://rubygems.org/gems/webby"&gt;Webby&lt;/a&gt; — a small Ruby gem that generated a static site from markdown. Before the &lt;a href="https://jamstack.org/"&gt;JAMstack&lt;/a&gt; &amp;lsquo;revolution&amp;rsquo;, static sites were a niche, but one that existed for sure. &lt;a href="https://jekyllrb.com/"&gt;Jekyll&lt;/a&gt; won that early market.&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; Long before NPM supply chain attacks were on anyone&amp;rsquo;s radar, I loved the idea of simple websites with limited upkeep. Yesterday I shipped &lt;a href="https://jed.codes/search/"&gt;search for this blog&lt;/a&gt; (built on &lt;a href="https://gohugo.io/"&gt;Hugo&lt;/a&gt;) powered by a precompiled index. Simple, beautiful, future proof.&lt;/p&gt;</description></item><item><title>TDD is the lab, telemetry is the field</title><link>https://jed.codes/posts/betzen-telemetry-driven-development/</link><pubDate>Wed, 01 Jul 2026 21:41:52 -0700</pubDate><guid>https://jed.codes/posts/betzen-telemetry-driven-development/</guid><description>&lt;p&gt;&lt;img src="https://jed.codes/images/telemetry-driven-development_hu_3d3d90cc4e76481f.webp" alt="Split illustration: on the left, an engineer in a lab coat working at a workbench with red/green/refactor monitors labeled “MODEL: TDD — Predefined Behavior”; on the right, a field-scientist figure walking through a landscape of telemetry span waterfalls and flame graphs, alongside a placard reading “The purpose of a system is what it does — Stafford Beer” and “FIELD SCIENCE: TeDD — Actual Behavior”." width="1600" height="872" loading="lazy" decoding="async"&gt;&lt;/p&gt;
&lt;p&gt;Noah Betzen&amp;rsquo;s &lt;a href="https://www.youtube.com/watch?v=irQicdafnyM"&gt;&amp;ldquo;Telemetry Driven Development&amp;rdquo;&lt;/a&gt; talk from ElixirConf gave me a reason to write down a conviction I&amp;rsquo;ve been carrying for a while: for most of us, Test Driven Development (TDD) is a substitute for understanding how the system behaves. A more honest description is that it &lt;em&gt;models&lt;/em&gt; how the system behaves against a set of predefined behaviors and expectations. &lt;strong&gt;TDD is a model of behavior — not the behavior of the system at large.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>F̶r̶a̶m̶e̶w̶o̶r̶k̶ Core Focus in the AI Age</title><link>https://jed.codes/posts/core-focus-in-the-ai-age/</link><pubDate>Tue, 30 Jun 2026 08:45:00 -0700</pubDate><guid>https://jed.codes/posts/core-focus-in-the-ai-age/</guid><description>&lt;p&gt;A lightning talk from Blast Off Rails 2026. I demo a globally distributed feature flag system I built on open-feature + Flagd backed by S3, for under a dollar a month, surfaced via AI-driven code spelunking. Frameworks historically earned their keep by polyfilling the gaps between core technologies (Active Record over MySQL, Postgres, SQLite); the core technologies have since caught up (JSONB, native pub/sub) but frameworks often remain burdened by the polyfill. Batteries-included framing made the polyfill feel free, but the batteries aren&amp;rsquo;t free to replace — they&amp;rsquo;re ongoing support past their usefulness as a polyfill, and often drift toward implementations worse than the core they wrap. I argue AI makes fluency cheap, so the bet shifts from T-shaped to M-shaped skill stacking: stack depth in multiple cores — database, web spec, distributed systems, and cloud-native technologies (like the demo) — and let AI fill the gaps you can still evaluate. Ideally this lets us traverse more closely to the technology, taking advantage of what it does really well, and prevents reinventing tech that has outlived its polyfill usefulness.&lt;/p&gt;</description></item><item><title>Just Print This Once</title><link>https://jed.codes/posts/just-print-this-once/</link><pubDate>Sun, 28 Jun 2026 13:15:20 -0700</pubDate><guid>https://jed.codes/posts/just-print-this-once/</guid><description>&lt;h2 id="working-on-vacation"&gt;Working on Vacation?&lt;/h2&gt;
&lt;p&gt;Like every summer, we&amp;rsquo;re lucky enough to spend time at the family cabin. The downside: LTE hotspot is my best wifi. Excited to play with his cousins, my son needed D&amp;amp;D character sheets printed (no wifi, no D&amp;amp;D Beyond). The cabin has an HP LaserJet P1006 from the mid 2010s. The age of Grandma&amp;rsquo;s laptop (sadly not at the cabin). I download HP&amp;rsquo;s official driver bundle from their support site. The installer opens.&lt;/p&gt;</description></item><item><title>The Moat Is Made of People</title><link>https://jed.codes/posts/the-moat-is-made-of-people/</link><pubDate>Thu, 25 Jun 2026 12:12:19 -0700</pubDate><guid>https://jed.codes/posts/the-moat-is-made-of-people/</guid><description>&lt;p&gt;Lasting competitive advantage in AI products comes from domain expertise and diverse team perspectives, not the model du jour. Using Ride with Dave (a cycling AI assistant) as a case study, I argue that deep knowledge of a specific field shapes architectural decisions competitors cannot easily replicate; choosing a database over RAG, knowing the shape of the data, understanding the rider. The moat is made of people.&lt;/p&gt;
&lt;p&gt;Read the full article on
&lt;a href="https://testdouble.com/insights/the-moat-is-made-of-people"&gt;testdouble&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Start With the Spreadsheet</title><link>https://jed.codes/posts/start-with-the-spreadsheet/</link><pubDate>Wed, 04 Mar 2026 21:09:58 -0800</pubDate><guid>https://jed.codes/posts/start-with-the-spreadsheet/</guid><description>&lt;h2 id="speedrunning-your-career"&gt;Speedrunning your career&lt;/h2&gt;
&lt;p&gt;The slack messages flow by.&lt;/p&gt;
&lt;p&gt;It seems impossible to get a grip. Every day, every hour there seems to be a new pattern, strategy, idea that feels pressing to understand and remain relevant. The experience of working in software can feel like that hamster wheel, continually rotating, never getting anywhere. The experience in the last 24 months has felt even more existential than that.&lt;/p&gt;
&lt;p&gt;Seeing colleagues (or maybe competitors) tackling these major feats; coordinating agents, pursuing orchestrated flows, writing features in their sleep. It can feel overwhelming to stay current, keep relevant, keep up.&lt;/p&gt;</description></item><item><title>Forms for static sites - stage 1</title><link>https://jed.codes/posts/forms-for-static-sites-stage-1/</link><pubDate>Wed, 12 Feb 2020 16:20:43 -0800</pubDate><guid>https://jed.codes/posts/forms-for-static-sites-stage-1/</guid><description>&lt;p&gt;In the first rendition of this site, I have enabled two services for form
submission.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been very excited to try some of the ideas the &lt;a href="jamstack.org"&gt;JAMstack&lt;/a&gt; supports.
Along with current projects and side ideas, hopefully this becomes a place to share
some of that journey.
Please checkout the &lt;a href="https://jed.codes/colophon"&gt;colophon&lt;/a&gt; for a current description of process and workflow.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="#contact-form"&gt;Contact Form&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#email-newsletter-subscribe-form"&gt;Email Newsletter&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="contact-form"&gt;Contact Form&lt;/h2&gt;
&lt;p&gt;For the initial release of this site I am using &lt;a href="formspree.io"&gt;formspree&lt;/a&gt; for
the contact form.
This form is fully hosted and is rather limited in functionality.&lt;/p&gt;</description></item><item><title>Laptop Local a Devops Oriented Workflow for Os X</title><link>https://jed.codes/posts/laptop-local-a-devops-oriented-workflow-for-os-x/</link><pubDate>Wed, 27 Jun 2018 11:29:15 -0800</pubDate><guid>https://jed.codes/posts/laptop-local-a-devops-oriented-workflow-for-os-x/</guid><description>&lt;p&gt;My workflow for maintaining dependencies and application updates on my development machine using a selection of automation and configuration tools.&lt;/p&gt;
&lt;p&gt;Originally published on
&lt;a href="https://medium.com/@jedschneider/laptop-local-a-devops-oriented-workflow-for-mac-os-x-ecc67c6badf"&gt;medium&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Domain Oriented Thinking</title><link>https://jed.codes/posts/domain-oriented-thinking/</link><pubDate>Fri, 20 Oct 2017 11:40:48 -0800</pubDate><guid>https://jed.codes/posts/domain-oriented-thinking/</guid><description>&lt;p&gt;In my mind, the difference between domain thinking and discrete problem thinking is how considerate you are of others.&lt;/p&gt;
&lt;p&gt;Originally published on
&lt;a href="https://medium.com/@jedschneider/domain-oriented-thinking-7923c13c2328"&gt;medium&lt;/a&gt;&lt;/p&gt;</description></item><item><title/><link>https://jed.codes/services/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jed.codes/services/</guid><description>&lt;h1 id="services-description"&gt;Services Description&lt;/h1&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;As a software consultant, I specialize in delivering high-quality web development and DevOps services to clients across various industries. My goal is to help businesses enhance their online presence and streamline their development operations through customized solutions.&lt;/p&gt;
&lt;h2 id="services-offered"&gt;Services Offered&lt;/h2&gt;
&lt;h3 id="1-web-development"&gt;1. Web Development&lt;/h3&gt;
&lt;p&gt;I provide comprehensive web development services, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Custom Website Development with Rails and Phoenix:&lt;/strong&gt; Creating visually appealing and user-friendly websites tailored to client specifications.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2-devops-services"&gt;2. DevOps Services&lt;/h3&gt;
&lt;p&gt;I offer a range of DevOps services to optimize software development and operations, including:&lt;/p&gt;</description></item><item><title>About</title><link>https://jed.codes/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jed.codes/about/</guid><description>&lt;p&gt;I am a software developer and consultant based in the Portland, OR metro area. I specialize in Ruby, Golang, Elixir, flavors of JavaScript, other functional languages, and DevOps.&lt;/p&gt;
&lt;p&gt;I am a senior consultant for &lt;a href="https://testdouble.com"&gt;testdouble&lt;/a&gt; where I&amp;rsquo;ve worked at a range of clients: from fast-scaling consumer fintechs to greenfield projects to deeply established clients with many decades of software experience.&lt;/p&gt;
&lt;p&gt;Prior to software, I raced bikes professionally for more than a decade; winning two national championships along the way. I finished on the podium in another seven national championship events. I raced for the US National Team at the 1998 World Mountain Bike Championships, and on the road at Tour de la Somme (France), Kettler Classic (Austria), Fleche du Sud (Luxembourg), and numerous other engagements. Stateside I rode on the Jittery Joe&amp;rsquo;s professional cycling team where I was able to race in Redlands and the Tour of Georgia in 2004. Launching the Jittery Joe&amp;rsquo;s webstore and running their onsite event marketing was my entry point into digital marketing and e-commerce, which gave me the confidence and experience to dive into web development in 2006.&lt;/p&gt;</description></item><item><title>colophon</title><link>https://jed.codes/colophon/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jed.codes/colophon/</guid><description>&lt;ul&gt;
&lt;li&gt;Static Site Generator: &lt;a href="gohugo.io"&gt;Hugo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Hosting &lt;a href=""&gt;AWS Amplify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Source code hosting &lt;a href="https://github.com"&gt;Github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Mailing List &lt;a href="https://mailchimp.com"&gt;Mailchimp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>contact</title><link>https://jed.codes/contact/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jed.codes/contact/</guid><description>&lt;p&gt;Let's work together!&lt;/p&gt;
&lt;p&gt;I work with organizations large and small to help them create value and build sustainable software. Interested in building something interesting? &lt;/p&gt;

&lt;form
 class="pure-form"
 action="https://formspree.io/mvoaljvd"
 method="POST"
 &gt;


 &lt;fieldset class="pure-group"&gt;
 &lt;input class="pure-input-3-4" type="text" name="_replyto" placeholder="email"&gt;
 &lt;input class="pure-input-3-4" type="text" name="first_name" placeholder="first name"&gt;
 &lt;input class="pure-input-3-4" type="text" name="last_name" placeholder="last name"&gt;
 &lt;/fieldset&gt;
 &lt;fieldset class="pure-group"&gt;
 &lt;input type="text" name="_gotcha" style="display:none" /&gt;
 &lt;textarea class="pure-input-3-4" name="message" placeholder="message"&gt;&lt;/textarea&gt;
 &lt;/fieldset&gt;
 &lt;!-- your other form fields go here --&gt;

 &lt;button class="pure-button pure-input-3-4 pure-button-primary" type="submit"&gt;Send&lt;/button&gt;
&lt;/form&gt;

&lt;h3&gt;You can also send me a 💌.&lt;/h3&gt;

&lt;address&gt;
 JAS R&amp;D LLC&lt;/br&gt;
 11481 SW Hall Blvd&lt;/br&gt;
 Suite 201, Mailbox S&lt;/br&gt;
 Tigard, OR 97223&lt;/br&gt;
&lt;/address&gt;</description></item><item><title>Search</title><link>https://jed.codes/search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jed.codes/search/</guid><description/></item><item><title>Subscribe</title><link>https://jed.codes/subscribe/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jed.codes/subscribe/</guid><description>&lt;!-- Begin Mailchimp Signup Form --&gt;
&lt;div id="mc_embed_signup"&gt;
 &lt;form
 action="https://gmail.us4.list-manage.com/subscribe/post?u=8279c6bda970c1dad78194372&amp;amp;id=e7ad8fb038"
 method="post"
 id="mc-embedded-subscribe-form"
 name="mc-embedded-subscribe-form"
 class="validate pure-form pure-form-stacked"
 target="_blank"
 novalidate&gt;
 &lt;div id="mc_embed_signup_scroll"&gt;
 &lt;fieldset&gt;
 &lt;legend&gt;Sign up to stay in touch!&lt;/legend&gt;
 &lt;div class="pure-control-group"&gt;
 &lt;label for="mce-EMAIL"&gt;Email Address&lt;/label&gt;
 &lt;input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL"&gt;
 &lt;span class="pure-form-message"&gt;This is a required field.&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="pure-control-group"&gt;
 &lt;label for="mce-FNAME"&gt;First Name &lt;/label&gt;
 &lt;input type="text" value="" name="FNAME" class="" id="mce-FNAME"&gt;
 &lt;label for="mce-LNAME"&gt;Last Name &lt;/label&gt;
 &lt;input type="text" value="" name="LNAME" class="" id="mce-LNAME"&gt;
 &lt;/div&gt;
 &lt;/fieldset&gt;


 &lt;fieldset&gt;
 &lt;div class="pure-u-1 pure-u-sm-1-8"&gt;
 &lt;label for="mce-EMAILTYPE-0" class="pure-radio"&gt;
 &lt;input type="radio" value="html" name="EMAILTYPE" id="mce-EMAILTYPE-0"&gt;&lt;label for="mce-EMAILTYPE-0"&gt;html&lt;/label&gt;
 &lt;/label&gt;
 &lt;/div&gt;
 &lt;div class="pure-u-1 pure-u-sm-1-8"&gt;
 &lt;label for="mce-EMAILTYPE-1" class="pure-radio"&gt;
 &lt;input type="radio" value="text" name="EMAILTYPE" id="mce-EMAILTYPE-1"&gt;&lt;label for="mce-EMAILTYPE-1"&gt;text&lt;/label&gt;
 &lt;/label&gt;
 &lt;/div&gt;
 &lt;/fieldset&gt;
 &lt;div id="mce-responses" class="clear"&gt;
 &lt;div class="response" id="mce-error-response" style="display:none"&gt;&lt;/div&gt;
 &lt;div class="response" id="mce-success-response" style="display:none"&gt;&lt;/div&gt;
 &lt;/div&gt;

 &lt;!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups--&gt;
 &lt;div style="position: absolute; left: -5000px;" aria-hidden="true"&gt;
 &lt;input type="text" name="b_8279c6bda970c1dad78194372_e7ad8fb038" tabindex="-1" value=""&gt;
 &lt;/div&gt;

 &lt;input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="pure-button pure-button-primary"&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;/form&gt;
&lt;/div&gt;

&lt;!--End mc_embed_signup--&gt;</description></item><item><title>Thank You</title><link>https://jed.codes/thank-you/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jed.codes/thank-you/</guid><description>&lt;p&gt;Thank you for contacting me, I will be in touch shortly.&lt;/p&gt;</description></item></channel></rss>