<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Posts on Jake Worth</title><link>https://jakeworth.com/posts/</link><description>Recent content in Posts on Jake Worth</description><image><title>Jake Worth</title><url>https://jakeworth.com/twittercard.png</url><link>https://jakeworth.com/twittercard.png</link></image><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 30 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://jakeworth.com/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Genuinely Care</title><link>https://jakeworth.com/posts/genuinely-care/</link><pubDate>Mon, 29 Jun 2026 10:24:22 -0400</pubDate><guid>https://jakeworth.com/posts/genuinely-care/</guid><description>&lt;p&gt;I often reflect on a conversation from years ago with a former Army boss. It&amp;rsquo;s
foundational to how I understand leadership. He said that being a leader means
you have to &amp;ldquo;Genuinely care.&amp;rdquo;&lt;/p&gt;</description></item><item><title>Leave a Trace</title><link>https://jakeworth.com/posts/leave-a-trace/</link><pubDate>Thu, 18 Jun 2026 10:40:18 -0400</pubDate><guid>https://jakeworth.com/posts/leave-a-trace/</guid><description>&lt;p&gt;Always leave something behind. If you find something interesting, leave a trace
that you were there.&lt;/p&gt;</description></item><item><title>You Learn a Codebase by Changing It</title><link>https://jakeworth.com/posts/you-learn-a-codebase-by-changing-it/</link><pubDate>Thu, 28 May 2026 14:26:41 -0400</pubDate><guid>https://jakeworth.com/posts/you-learn-a-codebase-by-changing-it/</guid><description>&lt;p&gt;How do I &amp;ldquo;get up to speed&amp;rdquo; in a new codebase? Changing it.&lt;/p&gt;</description></item><item><title>Avoid Hasty Caching</title><link>https://jakeworth.com/posts/avoid-hasty-caching/</link><pubDate>Tue, 26 May 2026 15:00:01 -0400</pubDate><guid>https://jakeworth.com/posts/avoid-hasty-caching/</guid><description>&lt;p&gt;Approach caching with caution.&lt;/p&gt;</description></item><item><title>Become a Product-First Software Engineer</title><link>https://jakeworth.com/posts/become-a-product-first-software-engineer/</link><pubDate>Fri, 01 May 2026 10:00:45 -0400</pubDate><guid>https://jakeworth.com/posts/become-a-product-first-software-engineer/</guid><description>&lt;p&gt;I think many engineers would be better contributors if they started to think more about the customer impact of their work.&lt;/p&gt;</description></item><item><title>On commenting and approving pull requests</title><link>https://jakeworth.com/posts/on-commenting-and-approving-pull-requests/</link><pubDate>Wed, 22 Apr 2026 11:06:20 -0400</pubDate><guid>https://jakeworth.com/posts/on-commenting-and-approving-pull-requests/</guid><description>&lt;p&gt;After reviewing a lot of pull requests, I&amp;rsquo;ve settled on a simple default: if my comments are all nitpicks, suggestions, questions, or non-blocking issues, I leave them and approve the PR at the same time.&lt;/p&gt;</description></item><item><title>Incremental Dependency Upgrades</title><link>https://jakeworth.com/posts/incremental-dependency-upgrades/</link><pubDate>Mon, 20 Apr 2026 17:20:05 -0400</pubDate><guid>https://jakeworth.com/posts/incremental-dependency-upgrades/</guid><description>&lt;p&gt;When possible, I prefer to upgrade dependencies incrementally rather than making
several version jumps. So, we try not to go from React 16 to 19. We go from 16
to 17, then to 18, and finally to 19.&lt;/p&gt;
&lt;h3 id="the-risks-of-jumping-multiple-versions"&gt;The Risks of Jumping Multiple Versions&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s very tempting to jump to the latest release. It feels like time travel;
putting your application on the latest in the fewest number of steps. What’s not
to like?&lt;/p&gt;</description></item><item><title>Dependencies Go Forward</title><link>https://jakeworth.com/posts/dependencies-go-forward/</link><pubDate>Mon, 20 Apr 2026 17:12:04 -0400</pubDate><guid>https://jakeworth.com/posts/dependencies-go-forward/</guid><description>&lt;p&gt;A policy I favor with dependency management: go forward. Going backward is an
exception that we must plan to remedy.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;Consider a CVE in a dependency at version 5.0 (v5.0). We’re advised that v6.0
and v4.0 are safe. Which way should we go, forward or backward?&lt;/p&gt;
&lt;p&gt;We want to default to forward. Even if we&amp;rsquo;ve been on v4.0 before and know it is
compatible. Even if we aren’t sure that v6.0 is &amp;ldquo;solid&amp;rdquo; or if it takes some code
changes to implement.&lt;/p&gt;</description></item><item><title>Catastrophic Mistakes Are a Team Failure</title><link>https://jakeworth.com/posts/catastrophic-mistakes-are-a-team-failure/</link><pubDate>Mon, 20 Apr 2026 12:11:33 -0400</pubDate><guid>https://jakeworth.com/posts/catastrophic-mistakes-are-a-team-failure/</guid><description>&lt;p&gt;If people can make catastrophic mistakes on your team, the process is broken.&lt;/p&gt;</description></item><item><title>CI/CD and Engineer Morale</title><link>https://jakeworth.com/posts/ci-cd-and-engineer-morale/</link><pubDate>Mon, 20 Apr 2026 11:41:19 -0400</pubDate><guid>https://jakeworth.com/posts/ci-cd-and-engineer-morale/</guid><description>&lt;p&gt;Why do software teams push continuous deployment so strongly? One of the most
important and least discussed reasons is engineer morale.&lt;/p&gt;</description></item><item><title>Tradeoffs of Permanently Forking a Library</title><link>https://jakeworth.com/posts/permanently-forking-a-library-tradeoffs/</link><pubDate>Fri, 03 Apr 2026 15:54:06 -0400</pubDate><guid>https://jakeworth.com/posts/permanently-forking-a-library-tradeoffs/</guid><description>&lt;p&gt;Permanently forking a library is something I&amp;rsquo;ve observed on several teams. But, there are tradeoffs that aren&amp;rsquo;t always obvious.&lt;/p&gt;</description></item><item><title>A Missing README Isn't a Missing README</title><link>https://jakeworth.com/posts/a-missing-readme-isnt-a-missing-readme/</link><pubDate>Sun, 29 Mar 2026 09:32:47 -0400</pubDate><guid>https://jakeworth.com/posts/a-missing-readme-isnt-a-missing-readme/</guid><description>&lt;p&gt;A missing README is rarely just missing documentation. It usually signals other
things, too.&lt;/p&gt;</description></item><item><title>Better Developer Experience With Friday Reboots</title><link>https://jakeworth.com/posts/better-dev-exp-with-friday-reboots/</link><pubDate>Wed, 11 Mar 2026 09:57:50 -0400</pubDate><guid>https://jakeworth.com/posts/better-dev-exp-with-friday-reboots/</guid><description>&lt;p&gt;A developer experience practice I&amp;rsquo;ve recently picked up is routine Friday reboots of my workstation. I think this can make your workflow (and even perhaps your life as an engineer?) a little better.&lt;/p&gt;</description></item><item><title>How I Run a Fully-Remote Software Engineering Standup</title><link>https://jakeworth.com/posts/how-i-run-a-software-engineering-standup/</link><pubDate>Wed, 04 Mar 2026 10:31:38 -0500</pubDate><guid>https://jakeworth.com/posts/how-i-run-a-software-engineering-standup/</guid><description>&lt;p&gt;I&amp;rsquo;ve been participating in fully-remote software standups every day for over a decade, and over the past two years, leading them, too. Here&amp;rsquo;s how I run the best standup meetings that I can.&lt;/p&gt;</description></item><item><title>How I Read 44 Books Last Year</title><link>https://jakeworth.com/posts/how-i-read-44-books-last-year/</link><pubDate>Tue, 24 Feb 2026 16:10:54 -0500</pubDate><guid>https://jakeworth.com/posts/how-i-read-44-books-last-year/</guid><description>&lt;p&gt;Do you want to read more? Over a decade, I&amp;rsquo;ve been on a journey from casual to power-reader. In this post, I&amp;rsquo;d like to share the ideas and techniques that have helped me read more.&lt;/p&gt;</description></item><item><title>Favorite Ideas from "It Doesn't Have to Be Crazy at Work"</title><link>https://jakeworth.com/posts/favorite-ideas-from-idhtbcaw/</link><pubDate>Fri, 20 Feb 2026 08:40:45 -0500</pubDate><guid>https://jakeworth.com/posts/favorite-ideas-from-idhtbcaw/</guid><description>&lt;p&gt;I recently re-read &lt;em&gt;It Doesn&amp;rsquo;t Have to be Crazy at Work&lt;/em&gt; by Jason Fried and David Heinemeier of Basecamp. Here are some of my favorite ideas.&lt;/p&gt;</description></item><item><title>"What's Wrong With This Idea?"</title><link>https://jakeworth.com/posts/whats-wrong-with-this-idea/</link><pubDate>Wed, 11 Feb 2026 09:43:43 -0500</pubDate><guid>https://jakeworth.com/posts/whats-wrong-with-this-idea/</guid><description>&lt;p&gt;One of my favorite problem-solving questions is: &amp;ldquo;What&amp;rsquo;s wrong with this idea?&amp;rdquo; It drives the conversation away from why the idea might work, and toward why it might fail. That perspective is invaluable when building.&lt;/p&gt;</description></item><item><title>Things I Check Before Opening a PR</title><link>https://jakeworth.com/posts/things-i-check-before-opening-a-pr/</link><pubDate>Sat, 07 Feb 2026 14:58:34 -0500</pubDate><guid>https://jakeworth.com/posts/things-i-check-before-opening-a-pr/</guid><description>&lt;p&gt;What is a programmer but a series of PRs (pull requests)? I optimize PRs to
introduce the best code I can, be easy to review, and document my work so I can
make sense of it in the future. Here are some things I always check before
opening a PR.&lt;/p&gt;</description></item><item><title>Why sleep Is Risky in Production Code</title><link>https://jakeworth.com/posts/why-we-discourage-sleep/</link><pubDate>Thu, 05 Feb 2026 08:00:51 -0500</pubDate><guid>https://jakeworth.com/posts/why-we-discourage-sleep/</guid><description>&lt;p&gt;You might have heard that using blocking, waiting code, &lt;em&gt;e.g.&lt;/em&gt;, &lt;code&gt;sleep&lt;/code&gt; in many
languages, is discouraged. Why?&lt;/p&gt;</description></item><item><title>How to Unabstract an Abstraction</title><link>https://jakeworth.com/posts/how-to-unabstract-an-abstraction/</link><pubDate>Sun, 01 Feb 2026 12:46:52 -0500</pubDate><guid>https://jakeworth.com/posts/how-to-unabstract-an-abstraction/</guid><description>&lt;p&gt;Abstractions in code are easy to add and challenging to remove. Sometimes we feel stuck with them. But the good news is, you can back out of almost any abstraction with the right mindset.&lt;/p&gt;</description></item><item><title>Building with MCP, for Real</title><link>https://jakeworth.com/posts/building-with-mcp-for-real/</link><pubDate>Fri, 23 Jan 2026 09:23:29 -0500</pubDate><guid>https://jakeworth.com/posts/building-with-mcp-for-real/</guid><description>&lt;p&gt;This year I built several Model Context Protocol (MCP) servers to support ongoing R&amp;amp;D. Here&amp;rsquo;s my report.&lt;/p&gt;</description></item><item><title>Learning to Program in 2026</title><link>https://jakeworth.com/posts/learning-to-program-in-2026/</link><pubDate>Fri, 16 Jan 2026 12:00:19 -0500</pubDate><guid>https://jakeworth.com/posts/learning-to-program-in-2026/</guid><description>&lt;p&gt;If I had to start over as a person who wanted to become a professional programmer, in 2026, what would I do?&lt;/p&gt;</description></item><item><title>Things I Don't Know, As of 2026</title><link>https://jakeworth.com/posts/things-i-dont-know-as-of-2026/</link><pubDate>Tue, 13 Jan 2026 11:25:29 -0500</pubDate><guid>https://jakeworth.com/posts/things-i-dont-know-as-of-2026/</guid><description>&lt;p&gt;Here&amp;rsquo;s a list of the things that I&amp;rsquo;d like to learn about and have chosen not to specialize in (yet), as of 2026.&lt;/p&gt;</description></item><item><title>Getting It Right the First Time</title><link>https://jakeworth.com/posts/getting-it-right-the-first-time/</link><pubDate>Mon, 05 Jan 2026 07:51:03 -0500</pubDate><guid>https://jakeworth.com/posts/getting-it-right-the-first-time/</guid><description>&lt;p&gt;There&amp;rsquo;s an enviable quality of great engineers I&amp;rsquo;ve known: they seem to get things right the first time. When you ask them to do something, and they say &amp;ldquo;It&amp;rsquo;s done&amp;rdquo;, it is, almost always. How?&lt;/p&gt;</description></item><item><title>Running Great Refinement Meetings</title><link>https://jakeworth.com/posts/running-great-refinement-meetings/</link><pubDate>Mon, 01 Dec 2025 11:18:17 -0500</pubDate><guid>https://jakeworth.com/posts/running-great-refinement-meetings/</guid><description>&lt;p&gt;This year I&amp;rsquo;ve run over 25 Scrum refinement meetings; here&amp;rsquo;s what I&amp;rsquo;ve learned.&lt;/p&gt;</description></item><item><title>Prioritization for Engineers: Rank Every Work List</title><link>https://jakeworth.com/posts/always-be-ranking/</link><pubDate>Thu, 23 Oct 2025 13:46:50 -0400</pubDate><guid>https://jakeworth.com/posts/always-be-ranking/</guid><description>&lt;p&gt;Anytime you&amp;rsquo;re making a list at work, rank it.&lt;/p&gt;</description></item><item><title>Acceptance Criteria That Actually Work</title><link>https://jakeworth.com/posts/acceptance-criteria-that-actually-work/</link><pubDate>Tue, 30 Sep 2025 03:37:56 -0400</pubDate><guid>https://jakeworth.com/posts/acceptance-criteria-that-actually-work/</guid><description>&lt;p&gt;Acceptance criteria, or AC, describe what a feature or bugfix does. Writing them is an art, and some AC work much better than others. So, how do we make them work? By including a little more detail.&lt;/p&gt;</description></item><item><title>Get Better at Debugging by Making Predictions</title><link>https://jakeworth.com/posts/get-better-at-debugging-by-making-predictions/</link><pubDate>Tue, 23 Sep 2025 10:16:28 -0400</pubDate><guid>https://jakeworth.com/posts/get-better-at-debugging-by-making-predictions/</guid><description>&lt;p&gt;Shift to a proactive mindset by making predictions before any experiments in a debugging session.&lt;/p&gt;</description></item><item><title>Raise the "I'm Stuck" Flag</title><link>https://jakeworth.com/posts/raise-the-im-stuck-flag/</link><pubDate>Wed, 10 Sep 2025 14:16:30 -0400</pubDate><guid>https://jakeworth.com/posts/raise-the-im-stuck-flag/</guid><description>&lt;p&gt;Consider this scenario. You&amp;rsquo;ve been given some work, and you&amp;rsquo;re stuck. Hours have become days. You&amp;rsquo;ve exhausted the internet. You&amp;rsquo;re starting to backtrack, delete work, and start over. Feeling defeated. To make matters worse, you haven&amp;rsquo;t told anybody.&lt;/p&gt;</description></item><item><title>Debugging Is a Story</title><link>https://jakeworth.com/posts/debugging-is-a-story/</link><pubDate>Tue, 09 Sep 2025 13:27:03 -0400</pubDate><guid>https://jakeworth.com/posts/debugging-is-a-story/</guid><description>&lt;p&gt;Today I want to talk about a way I think about debugging: as a story that we tell to ourselves and each other.&lt;/p&gt;</description></item><item><title>Learning JavaScript Promises the Feynman Way</title><link>https://jakeworth.com/posts/learning-javascript-promises-the-feynman-way/</link><pubDate>Mon, 25 Aug 2025 12:08:06 -0400</pubDate><guid>https://jakeworth.com/posts/learning-javascript-promises-the-feynman-way/</guid><description>&lt;p&gt;Want to learn a tricky topic and sharpen your learning skills at the same time? In this post, I&amp;rsquo;ll use the Feynman Learning Technique— a method of learning complex things by explaining them simply— with a sprinkle of LLM magic, to deepen my understanding of JavaScript promises.&lt;/p&gt;</description></item><item><title>"Don't Stay Stuck" Digital Guide Launch</title><link>https://jakeworth.com/posts/dont-stay-stuck-digital-guide-launch/</link><pubDate>Tue, 12 Aug 2025 09:33:04 -0400</pubDate><guid>https://jakeworth.com/posts/dont-stay-stuck-digital-guide-launch/</guid><description>&lt;p&gt;I&amp;rsquo;m proud to announce the launch of my digital guide to software debugging, &lt;a href="https://jwworth.gumroad.com/l/dont-stay-stuck"&gt;Don&amp;rsquo;t Stay Stuck: A Debugging Guide for Rising Engineers&lt;/a&gt;!&lt;/p&gt;</description></item><item><title>A Talk on Twelve Factors</title><link>https://jakeworth.com/posts/a-talk-on-12-factors/</link><pubDate>Fri, 01 Aug 2025 13:48:58 -0400</pubDate><guid>https://jakeworth.com/posts/a-talk-on-12-factors/</guid><description>&lt;p&gt;Today I gave a talk to my team about the Twelve-Factor App Methodology.&lt;/p&gt;</description></item><item><title>A Kaizen for Knowledge Work</title><link>https://jakeworth.com/posts/we-ran-a-software-engineering-kaizen/</link><pubDate>Wed, 16 Jul 2025 09:00:30 -0400</pubDate><guid>https://jakeworth.com/posts/we-ran-a-software-engineering-kaizen/</guid><description>&lt;p&gt;Confluence was messy. Our documentation felt outdated, hard to navigate, and unreliable. Rather than scrap everything and start over, I decided to try something different: a Kaizen.&lt;/p&gt;</description></item><item><title>Generate the Data. Worry Later.</title><link>https://jakeworth.com/posts/generate-the-data/</link><pubDate>Mon, 07 Jul 2025 11:58:44 -0400</pubDate><guid>https://jakeworth.com/posts/generate-the-data/</guid><description>&lt;p&gt;A suggestion about data: generate it now, and figure out curation later.&lt;/p&gt;</description></item><item><title>Custom Ipsum for Real-World Testing</title><link>https://jakeworth.com/posts/custom-ipsum-for-real-world-testing/</link><pubDate>Fri, 27 Jun 2025 16:00:28 -0400</pubDate><guid>https://jakeworth.com/posts/custom-ipsum-for-real-world-testing/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Pastures which are subject to overflow should be avoided. All lambs born in April or May should be drenched about August or September following, to be certain of ridding them of worms that may later cause their death.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is output from a tool I built called &lt;em&gt;Veterinary Ipsum&lt;/em&gt;. It&amp;rsquo;s something I&amp;rsquo;ve created a few times: a Lorem Ipsum generator specific to my company&amp;rsquo;s business domain.&lt;/p&gt;</description></item><item><title>Banishing "Random" for Better Software Communication</title><link>https://jakeworth.com/posts/nothing-is-random/</link><pubDate>Tue, 17 Jun 2025 12:19:04 -0400</pubDate><guid>https://jakeworth.com/posts/nothing-is-random/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;I&amp;rsquo;m still getting this random 404.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Want to sound pro? Banish &amp;ldquo;random&amp;rdquo; from your software engineering vocabulary.&lt;/p&gt;</description></item><item><title>Why I Write for Software Engineers and Engineering Leaders</title><link>https://jakeworth.com/posts/why-im-writing-to-you/</link><pubDate>Wed, 11 Jun 2025 09:47:19 -0400</pubDate><guid>https://jakeworth.com/posts/why-im-writing-to-you/</guid><description>&lt;p&gt;Eight years ago I wrote a post called &lt;a href="https://www.jakeworth.com/posts/you-should-blog"&gt;You Should Blog&lt;/a&gt;. In it, I made an argument that I still believe in: public, professional writing is something every engineer should try. Today, I want to share why &lt;em&gt;I&lt;/em&gt; write, and have for over a decade.&lt;/p&gt;</description></item><item><title>Four Things I've Changed My Mind About in Engineering</title><link>https://jakeworth.com/posts/things-ive-changed-my-mind-about/</link><pubDate>Thu, 29 May 2025 09:20:14 -0400</pubDate><guid>https://jakeworth.com/posts/things-ive-changed-my-mind-about/</guid><description>&lt;p&gt;I think a mark of a great engineer is being willing to change one&amp;rsquo;s mind when presented with new information. Here are four technological things I&amp;rsquo;ve changed my mind about.&lt;/p&gt;</description></item><item><title>How I Approach Feature Requests</title><link>https://jakeworth.com/posts/how-i-approach-feature-requests/</link><pubDate>Wed, 14 May 2025 17:40:42 -0400</pubDate><guid>https://jakeworth.com/posts/how-i-approach-feature-requests/</guid><description>&lt;p&gt;Receiving feature requests is part of running a software team. Here&amp;rsquo;s how I handle them.&lt;/p&gt;</description></item><item><title>Don't Guess</title><link>https://jakeworth.com/posts/dont-guess/</link><pubDate>Tue, 29 Apr 2025 09:30:56 -0400</pubDate><guid>https://jakeworth.com/posts/dont-guess/</guid><description>&lt;p&gt;This is a response to &amp;ldquo;Don&amp;rsquo;t Guess&amp;rdquo; from the excellent &lt;a href="https://endler.dev/2025/best-programmers/"&gt;&amp;ldquo;The Best Programmers I Know&amp;rdquo;&lt;/a&gt; by Matthias Endler. My goal is to crystallize my understanding of this trait.&lt;/p&gt;</description></item><item><title>Your Software Is Confusing</title><link>https://jakeworth.com/posts/your-software-is-confusing/</link><pubDate>Mon, 07 Apr 2025 10:16:44 -0400</pubDate><guid>https://jakeworth.com/posts/your-software-is-confusing/</guid><description>&lt;p&gt;If something in your software is confusing to a customer, it &lt;em&gt;is&lt;/em&gt; confusing.&lt;/p&gt;</description></item><item><title>Why I'm "All In" on TypeScript</title><link>https://jakeworth.com/posts/why-im-all-in-on-typescript/</link><pubDate>Wed, 26 Mar 2025 10:47:45 -0400</pubDate><guid>https://jakeworth.com/posts/why-im-all-in-on-typescript/</guid><description>&lt;p&gt;I&amp;rsquo;ve added TypeScript to several projects I&amp;rsquo;ve worked on. In this post, I&amp;rsquo;d like to discuss why I think TypeScript is essential and document my expectations around it.&lt;/p&gt;</description></item><item><title>Two-Follow-Up Rule for Closing Support and Internal Tickets</title><link>https://jakeworth.com/posts/hit-it-twice/</link><pubDate>Tue, 04 Mar 2025 09:28:10 -0500</pubDate><guid>https://jakeworth.com/posts/hit-it-twice/</guid><description>&lt;p&gt;I recently learned a practice for customer communication that I&amp;rsquo;d like to document. It&amp;rsquo;s called &amp;ldquo;Hit It Twice.&amp;rdquo;&lt;/p&gt;</description></item><item><title>It's Tradeoffs All the Way Down</title><link>https://jakeworth.com/posts/its-tradeoffs-all-the-way-down/</link><pubDate>Wed, 19 Feb 2025 10:11:37 -0400</pubDate><guid>https://jakeworth.com/posts/its-tradeoffs-all-the-way-down/</guid><description>&lt;p&gt;One common trait among early-career programmers is seeing technology choices in black-and-white. I&amp;rsquo;ve been there. &amp;ldquo;Redux is awesome!&amp;rdquo; &amp;ldquo;Nested ternaries are terrible!&amp;rdquo; As you advance as a programmer, for better or worse, you start to see almost everything as a trade-off.&lt;/p&gt;</description></item><item><title>"I Don't Understand" Debugging</title><link>https://jakeworth.com/posts/i-dont-understand-debugging/</link><pubDate>Thu, 13 Feb 2025 09:52:51 -0400</pubDate><guid>https://jakeworth.com/posts/i-dont-understand-debugging/</guid><description>&lt;p&gt;My definition of &amp;ldquo;I don&amp;rsquo;t understand&amp;rdquo; debugging.&lt;/p&gt;</description></item><item><title>How to Start a Meetup Group (Lessons from Running One for 10 Years)</title><link>https://jakeworth.com/posts/how-i-organize-a-meetup/</link><pubDate>Mon, 03 Feb 2025 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/how-i-organize-a-meetup/</guid><description>&lt;p&gt;I&amp;rsquo;ve been organizing Meetups for a decade, starting with Vim Chicago and Chicago Elixir, and now running &lt;a href="https://mainejs.org/"&gt;Maine JS&lt;/a&gt; from Portland, Maine. In honor of our most recent Meetup, here&amp;rsquo;s my practical guide on how to start a Meetup group, based on what&amp;rsquo;s worked for me.&lt;/p&gt;</description></item><item><title>My Annual Review 2024</title><link>https://jakeworth.com/posts/my-annual-review-2024/</link><pubDate>Tue, 31 Dec 2024 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/my-annual-review-2024/</guid><description>&lt;p&gt;Here&amp;rsquo;s my annual review covering 2024.&lt;/p&gt;</description></item><item><title>Hard-Won Software Development Habits</title><link>https://jakeworth.com/posts/hard-won-software-development-habits/</link><pubDate>Wed, 27 Nov 2024 10:19:47 -0400</pubDate><guid>https://jakeworth.com/posts/hard-won-software-development-habits/</guid><description>&lt;p&gt;This post is about how to write software well. It was inspired by &lt;a href="https://zarar.dev/good-software-development-habits/"&gt;this post&lt;/a&gt; with a similar title. Read it and write yours.&lt;/p&gt;</description></item><item><title>Ship Earlier to Learn What Matters</title><link>https://jakeworth.com/posts/we-should-take-this-outside/</link><pubDate>Sun, 24 Nov 2024 10:16:49 -0400</pubDate><guid>https://jakeworth.com/posts/we-should-take-this-outside/</guid><description>&lt;p&gt;TONY: We should take this outside.&lt;/p&gt;</description></item><item><title>Being the Third Engineer</title><link>https://jakeworth.com/posts/being-the-third-engineer/</link><pubDate>Wed, 16 Oct 2024 13:37:01 -0400</pubDate><guid>https://jakeworth.com/posts/being-the-third-engineer/</guid><description>&lt;p&gt;I was the third engineer hired by my company, not counting our technical co-founder. I like that position, and it seems to play to my strengths.&lt;/p&gt;</description></item><item><title>Getting Comfortable With Discomfort in Software Engineering</title><link>https://jakeworth.com/posts/comfort-with-discomfort/</link><pubDate>Tue, 03 Sep 2024 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/comfort-with-discomfort/</guid><description>&lt;p&gt;Today I&amp;rsquo;d like to talk about a quality that&amp;rsquo;s essential to success as a computer programmer. Let&amp;rsquo;s call it &amp;ldquo;comfort with discomfort.&amp;rdquo; As programmers, we live in this unsettling space. Here are some thoughts on discomfort and tips for dealing with it skillfully.&lt;/p&gt;</description></item><item><title>Decoupling Design From Engineering</title><link>https://jakeworth.com/posts/decoupling-design-from-engineering/</link><pubDate>Thu, 29 Aug 2024 11:55:49 -0400</pubDate><guid>https://jakeworth.com/posts/decoupling-design-from-engineering/</guid><description>&lt;p&gt;Often, when you work as an engineer on a small team, you don&amp;rsquo;t have dedicated designers on staff. How can you deliver beautiful, intuitive software without designers? Here&amp;rsquo;s a trick that helps me: decoupling my design work from my engineering work.&lt;/p&gt;</description></item><item><title>The Secret to Being a 10x Engineer</title><link>https://jakeworth.com/posts/the-secret-to-being-a-10x-engineer/</link><pubDate>Fri, 26 Jul 2024 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/the-secret-to-being-a-10x-engineer/</guid><description>&lt;p&gt;Our industry has a concept of &amp;ldquo;10x engineers&amp;rdquo;, individual contributors who have
the impact of ten colleagues. How can you become one? I&amp;rsquo;ll try to answer that
in this post.&lt;/p&gt;</description></item><item><title>Find Every Debugging Trail Marker</title><link>https://jakeworth.com/posts/dont-skip-debugging-steps/</link><pubDate>Mon, 17 Jun 2024 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/dont-skip-debugging-steps/</guid><description>&lt;p&gt;If you&amp;rsquo;ve ever watched me debug, you might think I&amp;rsquo;m moving slowly. That&amp;rsquo;s
because I try hard to find every marker on the debugging trail. I believe this
is one of the most valuable skills in debugging.&lt;/p&gt;</description></item><item><title>How I Review Code, Part 2</title><link>https://jakeworth.com/posts/how-i-review-code-pt-2/</link><pubDate>Thu, 06 Jun 2024 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/how-i-review-code-pt-2/</guid><description>&lt;p&gt;Reviewing code is tricky. When I&amp;rsquo;m doing it, I&amp;rsquo;m trying to achieve a few things
at once. In this post, I&amp;rsquo;d like to document the ways I try to add value via
code reviews.&lt;/p&gt;</description></item><item><title>How to Deliver Code Every Day</title><link>https://jakeworth.com/posts/how-to-deliver-code-every-day/</link><pubDate>Thu, 15 Feb 2024 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/how-to-deliver-code-every-day/</guid><description>&lt;p&gt;I recently calculated that I merge 0.8 pull requests every day into my team
repo. Let&amp;rsquo;s round up and say I merge about one PR every day, delivering one or
more features to production. I like this velocity, and in this post, I&amp;rsquo;ll
explain how you can achieve it yourself.&lt;/p&gt;</description></item><item><title>Practical Ways to 'Learn in Public' Now</title><link>https://jakeworth.com/posts/practical-ways-to-learn-in-public-now/</link><pubDate>Sun, 28 Jan 2024 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/practical-ways-to-learn-in-public-now/</guid><description>&lt;p&gt;I&amp;rsquo;ve been a practitioner of Shawn Wang&amp;rsquo;s &lt;a href="https://www.swyx.io/learn-in-public"&gt;&amp;lsquo;Learn in Public&amp;rsquo;&lt;/a&gt; for years.
In this post, I&amp;rsquo;ll share a list of ways I&amp;rsquo;ve found to learn in public.&lt;/p&gt;</description></item><item><title>Reflections on Ten Years Professionally Programming</title><link>https://jakeworth.com/posts/reflections-on-ten-years-professsionally-programming/</link><pubDate>Tue, 09 Jan 2024 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/reflections-on-ten-years-professsionally-programming/</guid><description>&lt;p&gt;I recently hit a decade of professional programming. I&amp;rsquo;d like to take
a moment here and reflect on what I&amp;rsquo;ve learned.&lt;/p&gt;</description></item><item><title>My Annual Review 2023</title><link>https://jakeworth.com/posts/my-annual-review-2023/</link><pubDate>Thu, 28 Dec 2023 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/my-annual-review-2023/</guid><description>&lt;p&gt;Here&amp;rsquo;s my annual professional review covering 2023.&lt;/p&gt;</description></item><item><title>Master the Fundamentals First</title><link>https://jakeworth.com/posts/you-cant-be-looking-up-map/</link><pubDate>Thu, 07 Dec 2023 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/you-cant-be-looking-up-map/</guid><description>&lt;p&gt;When I was learning to program, I was fortunate to pair with very experienced
engineers. One day while coding, I said: &amp;ldquo;I think we need to use Ruby&amp;rsquo;s &lt;code&gt;map&lt;/code&gt;
method, but I&amp;rsquo;m not sure how that works. Let me look it up.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Later, my pair offered some feedback: &amp;ldquo;You can&amp;rsquo;t be looking up &lt;code&gt;map&lt;/code&gt;. You need
to know how all of Ruby&amp;rsquo;s Enumerable methods work.&amp;rdquo;&lt;/p&gt;</description></item><item><title>"What Would Finishing This Today Look Like?"</title><link>https://jakeworth.com/posts/what-would-finishing-this-today-look-like/</link><pubDate>Thu, 09 Nov 2023 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/what-would-finishing-this-today-look-like/</guid><description>&lt;p&gt;When I don&amp;rsquo;t feel like I&amp;rsquo;m making sufficient progress at work, I have a
favorite technique: asking &amp;ldquo;What would finishing this today look like?&amp;rdquo;&lt;/p&gt;</description></item><item><title>Absence Of Color Is Better Than the Wrong Color</title><link>https://jakeworth.com/posts/no-color-is-better-than-the-wrong-color/</link><pubDate>Mon, 06 Nov 2023 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/no-color-is-better-than-the-wrong-color/</guid><description>&lt;p&gt;A design principle that&amp;rsquo;s crept into my programming could be summarized
as:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Absence of color is better than the wrong color.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Product Technique: Asking 'What's the Why?'</title><link>https://jakeworth.com/posts/whats-the-why/</link><pubDate>Mon, 30 Oct 2023 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/whats-the-why/</guid><description>&lt;p&gt;One of my favorite product hacks is asking: &amp;ldquo;What&amp;rsquo;s the why?&amp;rdquo;&lt;/p&gt;</description></item><item><title>Write Boring Code</title><link>https://jakeworth.com/posts/write-boring-code/</link><pubDate>Wed, 13 Sep 2023 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/write-boring-code/</guid><description>&lt;p&gt;Write a little bit of code, and you may come to an unsettling realization:
there are multiple ways to do almost any programming task. How do we choose
between several that work? I manage this uncertainty with a guideline: writing
boring code. In this post, I&amp;rsquo;ll try to explain what boring means to me.&lt;/p&gt;</description></item><item><title>Take the Big Project</title><link>https://jakeworth.com/posts/take-the-big-project/</link><pubDate>Wed, 06 Sep 2023 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/take-the-big-project/</guid><description>&lt;p&gt;Something I&amp;rsquo;ve learned as an engineer: when presented with the option of
working on a big project, or doing anything else, take the big project.&lt;/p&gt;</description></item><item><title>Thinking of Bugs in Classes</title><link>https://jakeworth.com/posts/thinking-of-bugs-in-classes/</link><pubDate>Sun, 03 Sep 2023 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/thinking-of-bugs-in-classes/</guid><description>&lt;p&gt;We spent the time writing tests, and yet, a bug survived. Should we just stop
writing tests? No, but we should maybe write better tests, and think about them differently.&lt;/p&gt;</description></item><item><title>Why Great PRs Are Great: Pull Requests Templates</title><link>https://jakeworth.com/posts/pull-request-templates/</link><pubDate>Mon, 14 Aug 2023 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/pull-request-templates/</guid><description>&lt;p&gt;Have you ever seen a pull request that seems to completely explain itself? It&amp;rsquo;s
a real artifact. I don&amp;rsquo;t know the project, yet I understand it. How can we get
results like this on every pull request, from every developer on the team,
every time?&lt;/p&gt;</description></item><item><title>Don't Ask for Advice; Ask for a Code Review</title><link>https://jakeworth.com/posts/dont-ask-for-advice-ask-for-a-code-review/</link><pubDate>Wed, 09 Aug 2023 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/dont-ask-for-advice-ask-for-a-code-review/</guid><description>&lt;p&gt;Here&amp;rsquo;s some advice about programming I&amp;rsquo;ve found useful: &amp;ldquo;Don&amp;rsquo;t ask for advice; ask for a code review.&amp;rdquo; In this post, I&amp;rsquo;d like to explore what I think this adage means.&lt;/p&gt;</description></item><item><title>From Booleans to Strings in Frontend State</title><link>https://jakeworth.com/posts/from-boolean-to-strings-in-frontend-state/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/from-boolean-to-strings-in-frontend-state/</guid><description>&lt;p&gt;When it comes to controlling frontend presentation, developers often rely on booleans. However, this approach can be limiting. In this post, I’ll explore the drawbacks of using booleans and introduce a more versatile alternative: plain old strings with type safety.&lt;/p&gt;</description></item><item><title>The Case Against "Try This" Debugging</title><link>https://jakeworth.com/posts/the-case-against-try-this-debugging/</link><pubDate>Mon, 26 Jun 2023 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/the-case-against-try-this-debugging/</guid><description>&lt;p&gt;In many group debugging sessions I&amp;rsquo;ve joined, a major technique being
deployed is something I call &amp;ldquo;Try This&amp;rdquo; debugging. In this post, I&amp;rsquo;d like
to talk about this anti-pattern, and consider a better way.&lt;/p&gt;</description></item><item><title>Absolute Imports in TypeScript and React: A Practical Guide</title><link>https://jakeworth.com/posts/the-joy-of-javascript-absolute-imports/</link><pubDate>Tue, 02 May 2023 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/the-joy-of-javascript-absolute-imports/</guid><description>&lt;p&gt;Absolute imports are an essential developer experience feature for me in any JavaScript application. In this post, I&amp;rsquo;ll explain what they are, how to use them, and why they matter.&lt;/p&gt;</description></item><item><title>My Daily Programming Routine as a Senior Software Engineer</title><link>https://jakeworth.com/posts/my-daily-programming-routine/</link><pubDate>Mon, 10 Apr 2023 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/my-daily-programming-routine/</guid><description>&lt;p&gt;Over the past decade, I&amp;rsquo;ve settled into a daily programming routine that helps me stay productive. It centers on code review, moving tickets forward, finishing in-progress work, and documenting what I learn. Here&amp;rsquo;s the exact workflow I use.&lt;/p&gt;</description></item><item><title>Variable Name Antipatterns Named and Explained</title><link>https://jakeworth.com/posts/variable-name-antipatterns/</link><pubDate>Mon, 03 Apr 2023 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/variable-name-antipatterns/</guid><description>&lt;blockquote&gt;
&lt;p&gt;There are only two hard things in Computer Science: cache invalidation and
naming things.
&amp;ndash; Phil Karlton&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Let&amp;rsquo;s talk about variable name antipatterns!&lt;/p&gt;</description></item><item><title>Cold Water for Your Code Coverage</title><link>https://jakeworth.com/posts/cold-water-for-your-code-coverage/</link><pubDate>Tue, 28 Mar 2023 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/cold-water-for-your-code-coverage/</guid><description>&lt;p&gt;Code coverage, the percentage of your code covered by automated tests, is a
metric associated with quality. In this post, I&amp;rsquo;d like to investigate this
association. And pour some cold water on it.&lt;/p&gt;</description></item><item><title>Does ChatGPT Mean Software Engineering Is Over?</title><link>https://jakeworth.com/posts/does-chat-gpt-mean-software-engineering-is-over/</link><pubDate>Sun, 26 Mar 2023 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/does-chat-gpt-mean-software-engineering-is-over/</guid><description>&lt;p&gt;Here&amp;rsquo;s an argument that&amp;rsquo;s gaining momentum in my field: AI will eliminate or greatly reduce the programming profession.&lt;/p&gt;</description></item><item><title>One-Sentence Summaries of Popular Technology Books</title><link>https://jakeworth.com/posts/one-sentence-summaries-of-popular-technology-books/</link><pubDate>Tue, 21 Mar 2023 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/one-sentence-summaries-of-popular-technology-books/</guid><description>&lt;p&gt;Here are some one-sentence summaries of books that have helped me understand
programming and technology.&lt;/p&gt;</description></item><item><title>How to Run an Agile Retrospective for Leaders</title><link>https://jakeworth.com/posts/how-to-run-an-agile-retrospective-for-leaders/</link><pubDate>Wed, 15 Mar 2023 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/how-to-run-an-agile-retrospective-for-leaders/</guid><description>&lt;p&gt;Retrospectives are one of my favorite engineering team practices. In this post,
I&amp;rsquo;ll explain why and how I run retros.&lt;/p&gt;</description></item><item><title>Type Your TypeScript Library Functions</title><link>https://jakeworth.com/posts/type-your-typescript-library-functions/</link><pubDate>Wed, 01 Mar 2023 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/type-your-typescript-library-functions/</guid><description>&lt;p&gt;There&amp;rsquo;s been a lot of recent discussion in the TypeScript community about
typing functions. These arguments tend to take binary positions: always type
your functions, or never type them unless the compiler demands it. Which is the best option?&lt;/p&gt;</description></item><item><title>The Power of CRUD Operations Explained with SQL</title><link>https://jakeworth.com/posts/the-power-of-crud-operations-explained-with-sql/</link><pubDate>Thu, 12 Jan 2023 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/the-power-of-crud-operations-explained-with-sql/</guid><description>&lt;p&gt;CRUD is an acronym that&amp;rsquo;s used a lot in web and mobile development. Frontend
engineers in particular might wonder what it means and why we use it.
In this post, I&amp;rsquo;ll explain CRUD using PostgreSQL, and talk about why it&amp;rsquo;s
important.&lt;/p&gt;</description></item><item><title>How to Create a Timer or Polling in React with setInterval</title><link>https://jakeworth.com/posts/how-to-create-a-simple-timer-in-react-with-setinterval/</link><pubDate>Thu, 29 Dec 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/how-to-create-a-simple-timer-in-react-with-setinterval/</guid><description>&lt;p&gt;Have you ever wanted to create a timer in a React app? This could be in support
of a UI timer or polling. In this post, I&amp;rsquo;ll explain how to create a timer
effect in a React application using hooks and &lt;code&gt;setInterval&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>My Feature Writing Template: Given/When/Then</title><link>https://jakeworth.com/posts/given-when-then/</link><pubDate>Tue, 20 Dec 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/given-when-then/</guid><description>&lt;p&gt;When preparing feature development work, I write Gherkin-style tickets,
which follow the &amp;ldquo;Given/When/Then&amp;rdquo; format. Many people call these stories, and
I do, too. This technique is incredibly effective! But why? In this post, I&amp;rsquo;ll try to answer that question.&lt;/p&gt;</description></item><item><title>Button, Link, or Neither? Three Principles for Clarity and Accessibility</title><link>https://jakeworth.com/posts/button-link-or-neither/</link><pubDate>Sat, 03 Dec 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/button-link-or-neither/</guid><description>&lt;p&gt;Which HTML elements should we be giving a user to click? In this post, I&amp;rsquo;ll
share some best practices for clickable elements.&lt;/p&gt;</description></item><item><title>All My Best Tips For Expertly Reviewing Your Own Code</title><link>https://jakeworth.com/posts/six-tips-for-reviewing-your-own-code/</link><pubDate>Sat, 12 Nov 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/six-tips-for-reviewing-your-own-code/</guid><description>&lt;p&gt;Great developers review their own code often and effectively. In this post, I&amp;rsquo;ll
share a checklist of all my best tips for maximizing this important practice.&lt;/p&gt;</description></item><item><title>Deliver a Great Standup Report as an Engineer</title><link>https://jakeworth.com/posts/deliver-a-great-standup-report-as-an-engineer/</link><pubDate>Wed, 09 Nov 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/deliver-a-great-standup-report-as-an-engineer/</guid><description>&lt;p&gt;I&amp;rsquo;ve been lucky to have worked with some great engineers, and one thing that
they tend to do exceptionally well is reporting about their work at meetings.
Today I&amp;rsquo;d like to summarize what I think makes a great standup report.&lt;/p&gt;</description></item><item><title>How to Write a Resume for Transitioning to Programming</title><link>https://jakeworth.com/posts/resume-for-transitioning-to-programming/</link><pubDate>Thu, 27 Oct 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/resume-for-transitioning-to-programming/</guid><description>&lt;p&gt;As a mentor at &lt;a href="https://www.codeplatoon.org/"&gt;Code Platoon&lt;/a&gt;, I&amp;rsquo;ve been able to help many people
transition into programming. In this post, I&amp;rsquo;d like to focus on a vital part of
that process: crafting your transitioning-to-tech resume.&lt;/p&gt;</description></item><item><title>Solving Exercism's Resistor Color Trio in TypeScript</title><link>https://jakeworth.com/posts/resistor-color-trio-in-typescript/</link><pubDate>Wed, 26 Oct 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/resistor-color-trio-in-typescript/</guid><description>&lt;p&gt;Today I completed the &amp;lsquo;Resistor Color Trio&amp;rsquo; TypeScript exercise on Exercism. Here&amp;rsquo;s my solution.&lt;/p&gt;</description></item><item><title>Vim Scratchpad Part 2</title><link>https://jakeworth.com/posts/vim-scratchpad-part-2/</link><pubDate>Wed, 26 Oct 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/vim-scratchpad-part-2/</guid><description>&lt;p&gt;Today, I&amp;rsquo;d like to dive deeper into a part of my practice: using a persisted
text file for jotting things down. In this post, I&amp;rsquo;ll explain the &amp;lsquo;why&amp;rsquo; behind this technique, and provide an
updated version of it.&lt;/p&gt;</description></item><item><title>Buy the Best Hardware You Can</title><link>https://jakeworth.com/posts/buy-the-best-hardware-you-can/</link><pubDate>Tue, 25 Oct 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/buy-the-best-hardware-you-can/</guid><description>&lt;p&gt;Some advice I offer people entering the programming profession is to buy the
best hardware you can. You&amp;rsquo;re going to need it.&lt;/p&gt;</description></item><item><title>Solving Exercism's Resistor Color Duo in TypeScript</title><link>https://jakeworth.com/posts/resistor-color-duo-in-typescript/</link><pubDate>Mon, 24 Oct 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/resistor-color-duo-in-typescript/</guid><description>&lt;p&gt;Today as a code kata I completed the &amp;lsquo;Resistor Color Duo&amp;rsquo; TypeScript exercise
on Exercism. Here&amp;rsquo;s my work.&lt;/p&gt;</description></item><item><title>Print Last Exit Code</title><link>https://jakeworth.com/posts/print-last-exit-code/</link><pubDate>Fri, 21 Oct 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/print-last-exit-code/</guid><description>&lt;p&gt;The exit code of a command in a Unix-based system is an important and
easy-to-miss piece of data. It isn&amp;rsquo;t printed to standard out; you have
to go looking for it. I find it useful to inspect this information when
debugging or considering chaining unfamiliar commands.&lt;/p&gt;</description></item><item><title>You Can't Change Nothing</title><link>https://jakeworth.com/posts/you-cant-change-nothing/</link><pubDate>Fri, 21 Oct 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/you-cant-change-nothing/</guid><description>&lt;p&gt;I saw a meme this week: a person debugging code, &amp;ldquo;My code doesn&amp;rsquo;t work.
Let&amp;rsquo;s change nothing and run it again.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;This is something that I&amp;rsquo;ve done. It seems pointless. But that&amp;rsquo;s not quite correct.&lt;/p&gt;</description></item><item><title>Read the Docs</title><link>https://jakeworth.com/posts/read-the-docs/</link><pubDate>Wed, 19 Oct 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/read-the-docs/</guid><description>&lt;p&gt;When learning a new language or framework, the first thing I do is read the
official documentation cover-to-cover.&lt;/p&gt;</description></item><item><title>The Factory Pattern, Explained in Ruby</title><link>https://jakeworth.com/posts/why-use-factorybot/</link><pubDate>Mon, 17 Oct 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/why-use-factorybot/</guid><description>&lt;p&gt;In this post, I&amp;rsquo;ll explain what factories are and why you want them, using Ruby.&lt;/p&gt;</description></item><item><title>Default to Programming Convention</title><link>https://jakeworth.com/posts/default-to-convention/</link><pubDate>Fri, 14 Oct 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/default-to-convention/</guid><description>&lt;p&gt;Trying to enforce unconventional coding preferences on a team is an uphill
battle. When in doubt, default to convention.&lt;/p&gt;</description></item><item><title>Recommended Reading</title><link>https://jakeworth.com/posts/recommended-reading/</link><pubDate>Wed, 28 Sep 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/recommended-reading/</guid><description>&lt;p&gt;Here are some books that have helped me understand programming. This list is a
living document that I plan to update as I read.&lt;/p&gt;</description></item><item><title>How to Introduce New Ideas</title><link>https://jakeworth.com/posts/how-to-introduce-new-ideas/</link><pubDate>Thu, 08 Sep 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/how-to-introduce-new-ideas/</guid><description>&lt;p&gt;How do you introduce new ways of working? We want to bring a new idea
to our engineering teams, such as a new command-line configuration, testing
tool, or design pattern. But engineers can be discerning and stubborn customers.
The idea needs to stand on its own. And, you have to sell it.&lt;/p&gt;</description></item><item><title>Computers Can Be Understood</title><link>https://jakeworth.com/posts/computers-can-be-understood/</link><pubDate>Tue, 06 Sep 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/computers-can-be-understood/</guid><description>&lt;p&gt;A big mental leap I made early in my programming was starting to view computers
as something that could be understood.&lt;/p&gt;</description></item><item><title>Vim Scratchpad</title><link>https://jakeworth.com/posts/vim-scratchpad/</link><pubDate>Thu, 25 Aug 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/vim-scratchpad/</guid><description>&lt;p&gt;Today I&amp;rsquo;d like to share a small part of my practice: using a persisted
scratchpad text file for jotting things down.&lt;/p&gt;</description></item><item><title>Improve Your API Documentation Workflow with Dash</title><link>https://jakeworth.com/posts/level-up-your-dash/</link><pubDate>Sun, 21 Aug 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/level-up-your-dash/</guid><description>&lt;p&gt;One of my all-time favorite programming tools is Dash by Kapeli. In this post,
I&amp;rsquo;ll share some tips for leveraging this fantastic program.&lt;/p&gt;</description></item><item><title>Prefer Real Data For Software Development</title><link>https://jakeworth.com/posts/prefer-real-data/</link><pubDate>Thu, 18 Aug 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/prefer-real-data/</guid><description>&lt;p&gt;When testing with data, I prefer realistic data rather than random data.&lt;/p&gt;</description></item><item><title>How Luck Played a Role in my Career</title><link>https://jakeworth.com/posts/luck-played-a-role/</link><pubDate>Mon, 15 Aug 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/luck-played-a-role/</guid><description>&lt;p&gt;I believe that luck is part of every professional journey. Here&amp;rsquo;s a sampling of
the luck I&amp;rsquo;ve had.&lt;/p&gt;</description></item><item><title>All My Best Debugging Tips</title><link>https://jakeworth.com/posts/all-my-best-debugging-tips/</link><pubDate>Fri, 05 Aug 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/all-my-best-debugging-tips/</guid><description>&lt;p&gt;This is a list of all the best debugging tips I&amp;rsquo;ve picked up over the years. Some of these might seem obvious, yet we forget them when it
counts. Debugging is a skill. You have to bring every tool you have to the job.&lt;/p&gt;</description></item><item><title>Tmux Application Startup Script</title><link>https://jakeworth.com/posts/tmux-application-startup-script/</link><pubDate>Thu, 28 Jul 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/tmux-application-startup-script/</guid><description>&lt;p&gt;My development environment depends on several processes running. Here&amp;rsquo;s how
I&amp;rsquo;ve scripted this setup.&lt;/p&gt;</description></item><item><title>Recognizing and Repairing a Broken Mental Model</title><link>https://jakeworth.com/posts/broken-mental-model/</link><pubDate>Mon, 25 Jul 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/broken-mental-model/</guid><description>&lt;p&gt;Perhaps you&amp;rsquo;re familiar with this scenario: you&amp;rsquo;re debugging and
&lt;a href="https://jakeworth.com/posts/dont-stay-stuck/"&gt;stuck&lt;/a&gt;. You&amp;rsquo;ve Googled, read some blog posts and docs.
You return to your search engine, type some characters, and then something
strange happens: the search engine autocompletes your question, and the results
are all purple because they have been visited by you. I&amp;rsquo;ve come to recognize
this moment as always a symptom of a broken mental model.&lt;/p&gt;</description></item><item><title>Retros Need Action Items</title><link>https://jakeworth.com/posts/retros-need-action-items/</link><pubDate>Tue, 19 Jul 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/retros-need-action-items/</guid><description>&lt;p&gt;Action items are small, defined, actionable TODOs to follow up on after the
meeting. An example: &amp;ldquo;close all pull requests opened more than 90 days ago.&amp;rdquo;
Agile retrospectives should produce many of these.&lt;/p&gt;</description></item><item><title>Better Than 'foo'</title><link>https://jakeworth.com/posts/better-than-foo/</link><pubDate>Wed, 13 Jul 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/better-than-foo/</guid><description>&lt;p&gt;There&amp;rsquo;s almost always a better variable name or value than &amp;lsquo;foo&amp;rsquo;. It&amp;rsquo;s useful
as a debugging placeholder, but it almost never belongs in production code, even and
especially in automated tests.&lt;/p&gt;</description></item><item><title>Database Migration Checklist</title><link>https://jakeworth.com/posts/database-migration-checklist/</link><pubDate>Mon, 11 Jul 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/database-migration-checklist/</guid><description>&lt;p&gt;I think a great database migration is: correct, atomic, reversible,
consistent with the style of the application, and (mostly) uncoupled from your
application and RDBMS.&lt;/p&gt;</description></item><item><title>Logging an Object in JavaScript</title><link>https://jakeworth.com/posts/logging-an-object/</link><pubDate>Thu, 07 Jul 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/logging-an-object/</guid><description>&lt;p&gt;When printing a JavaScript value to the console, I suggest using an object
literal over the raw value.&lt;/p&gt;</description></item><item><title>Why Ruby?</title><link>https://jakeworth.com/posts/why-ruby/</link><pubDate>Thu, 30 Jun 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/why-ruby/</guid><description>&lt;p&gt;Why should someone learn Ruby in 2022? Ruby was my first programming language, and although I&amp;rsquo;ve drifted elsewhere, I
write Ruby every day. Many people in my network are Ruby diehards. As a result,
it&amp;rsquo;s been a long time since I&amp;rsquo;ve gotten the chance to sell someone on Ruby.&lt;/p&gt;</description></item><item><title>What Are the Tradeoffs of Passing Objects as React Props?</title><link>https://jakeworth.com/posts/objects-as-props/</link><pubDate>Mon, 27 Jun 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/objects-as-props/</guid><description>&lt;p&gt;A common React pattern is to pass an object as a &lt;a href="https://reactjs.org/docs/components-and-props.html"&gt;prop&lt;/a&gt;. Let&amp;rsquo;s consider the ways this can be used and tradeoffs of each.&lt;/p&gt;</description></item><item><title>Naive Implementation: The Art of Artless Programming</title><link>https://jakeworth.com/posts/naive-implementation/</link><pubDate>Thu, 23 Jun 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/naive-implementation/</guid><description>&lt;p&gt;A naive implementation is a programming technique that prioritizes imperfect
shortcuts for the sake of speed, simplicity, or lack of knowledge.&lt;/p&gt;</description></item><item><title>Authentication vs. Authorization</title><link>https://jakeworth.com/posts/authentication-vs-authorization/</link><pubDate>Tue, 21 Jun 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/authentication-vs-authorization/</guid><description>&lt;p&gt;Authentication and authorization are two distinct concepts. Yet, I&amp;rsquo;ve found
they&amp;rsquo;re sometimes used interchangeably. In this post, I&amp;rsquo;d like to define these terms.&lt;/p&gt;</description></item><item><title>Spell Checking with Vim: Tutorial and Best Practices</title><link>https://jakeworth.com/posts/spell-check-with-vim/</link><pubDate>Wed, 15 Jun 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/spell-check-with-vim/</guid><description>&lt;p&gt;I write each post for this blog in Vim. Writing in the terminal makes me feel
like a programmer, even when I&amp;rsquo;m not specifically programming. In this post, I&amp;rsquo;ll share how I spellcheck in Vim.&lt;/p&gt;</description></item><item><title>How to Write a Perfect Bug Report (With Template)</title><link>https://jakeworth.com/posts/a-perfect-bug-report/</link><pubDate>Mon, 13 Jun 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/a-perfect-bug-report/</guid><description>&lt;p&gt;Bugs are part of software. Reporting bugs well is a necessary skill in an ever-growing number of job titles. In this post, I&amp;rsquo;d like to explain how to write a perfect bug report and offer some bug-reporting best practices.&lt;/p&gt;</description></item><item><title>Make a Prediction</title><link>https://jakeworth.com/posts/make-a-prediction/</link><pubDate>Wed, 08 Jun 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/make-a-prediction/</guid><description>&lt;p&gt;Imagine you&amp;rsquo;re debugging, and you&amp;rsquo;re &lt;a href="https://jakeworth.com/posts/dont-stay-stuck/"&gt;stuck&lt;/a&gt;. I have a technique that&amp;rsquo;s
going to help. Think of an action you might take. Predict what will happen
when you take that action. Take the action. Check if you were right or wrong,
consider that information, and repeat.&lt;/p&gt;</description></item><item><title>Desire Paths in Software</title><link>https://jakeworth.com/posts/desire-paths/</link><pubDate>Sun, 05 Jun 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/desire-paths/</guid><description>&lt;p&gt;We&amp;rsquo;ve all seen a &lt;a href="https://en.wikipedia.org/wiki/Desire_path"&gt;desire path&lt;/a&gt;. They are footpaths created by erosion from
human and animal traffic that communicate a wish for a path that doesn&amp;rsquo;t exist.
When you walk on a paved path toward a destination and notice a shortcut in
the earth, that&amp;rsquo;s a desire path. It&amp;rsquo;s the way people go, rather than the way we
would wish them to go.&lt;/p&gt;</description></item><item><title>Spend More Time Thinking Hard</title><link>https://jakeworth.com/posts/think-hard/</link><pubDate>Wed, 01 Jun 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/think-hard/</guid><description>&lt;p&gt;Ben Kuhn&amp;rsquo;s &lt;a href="https://www.benkuhn.net/thinkrealhard/"&gt;&amp;lsquo;Think Real Hard&amp;rsquo;&lt;/a&gt; shares a problem-solving checklist from the scientist Richard Feynman:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Write down the problem.&lt;/li&gt;
&lt;li&gt;Think real hard.&lt;/li&gt;
&lt;li&gt;Write down the solution.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On its face, this advice is ridiculous. If only we just sat and thought about
the problem, we&amp;rsquo;d win a Nobel Prize like Dr. Feynman!&lt;/p&gt;</description></item><item><title>PostgreSQL Polymorphism</title><link>https://jakeworth.com/posts/postgresql-polymorphism/</link><pubDate>Mon, 30 May 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/postgresql-polymorphism/</guid><description>&lt;p&gt;Scenario: you need a database record that can belong to one record or another, but not
both. Polymorphism and exclusivity. One approach is to create a polymorphic-style association at
the data layer. By doing so, you&amp;rsquo;ll get data integrity built in, rather than
trusting it will be enforced by each tenant at the application layer.&lt;/p&gt;</description></item><item><title>Goodbye Shared Dotfiles</title><link>https://jakeworth.com/posts/goodbye-shared-dotfiles/</link><pubDate>Wed, 25 May 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/goodbye-shared-dotfiles/</guid><description>&lt;p&gt;A lot of people start programming with shared dotfiles, copied from a team or
online. I did. Maybe you&amp;rsquo;re ready to move on; how would you do that?&lt;/p&gt;</description></item><item><title>Organizing React Components</title><link>https://jakeworth.com/posts/organizing-react-components/</link><pubDate>Mon, 23 May 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/organizing-react-components/</guid><description>&lt;p&gt;You&amp;rsquo;re creating a React app, and want to organize your components. Or maybe
you&amp;rsquo;re working in a legacy codebase, with many components in one directory, and
you want to better organize them. In this post, I&amp;rsquo;ll document an approach to
this problem that has worked for me.&lt;/p&gt;</description></item><item><title>On Starting Over</title><link>https://jakeworth.com/posts/on-starting-over/</link><pubDate>Wed, 18 May 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/on-starting-over/</guid><description>&lt;p&gt;I used to have a bad habit when working alone: I&amp;rsquo;d start a feature, begin
doubting my approach, throw away my work, and start over from scratch.
Sometimes more than once. The result? Wasted energy, abandoned code, confusion
about what I had and hadn&amp;rsquo;t implemented, and repetitive rework. This post is a
collection of thoughts on this practice.&lt;/p&gt;</description></item><item><title>How to Identify the Breaking Commit With Git Bisect</title><link>https://jakeworth.com/posts/find-the-breaking-git-commit/</link><pubDate>Tue, 17 May 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/find-the-breaking-git-commit/</guid><description>&lt;p&gt;Some code is broken, and you can&amp;rsquo;t figure out why. Maybe there are a lot of changes, and identifying the breaking change seems impossible. Or, maybe you&amp;rsquo;re curious about how things break in your organization. The tool you need is &lt;code&gt;git-bisect&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Commit Part of a File in Git</title><link>https://jakeworth.com/posts/commit-part-of-a-file-in-git/</link><pubDate>Fri, 06 May 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/commit-part-of-a-file-in-git/</guid><description>&lt;p&gt;You&amp;rsquo;ve been working on a big set of changes, and haven&amp;rsquo;t committed to Git yet.
Now, you want to commit some, but not all, changes to a file. Let&amp;rsquo;s look
at adding patches.&lt;/p&gt;</description></item><item><title>You Have to Get Fast to Get Good at Programming</title><link>https://jakeworth.com/posts/be-fast/</link><pubDate>Fri, 06 May 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/be-fast/</guid><description>&lt;p&gt;Great programmers aren&amp;rsquo;t fast because they&amp;rsquo;re great. They&amp;rsquo;re great because they&amp;rsquo;re fast.&lt;/p&gt;</description></item><item><title>Only One Way Out of a Function</title><link>https://jakeworth.com/posts/one-way-out-of-a-function/</link><pubDate>Mon, 02 May 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/one-way-out-of-a-function/</guid><description>&lt;p&gt;A programming style I try to practice could be described as: &amp;ldquo;there should be
only one way out of a function.&amp;rdquo; Early returns can often cause more confusion
than they&amp;rsquo;re worth. When possible, I avoid them in favor of a single return.&lt;/p&gt;</description></item><item><title>Am I Too Old to Become a Programmer?</title><link>https://jakeworth.com/posts/am-i-too-old-to-become-a-programmer/</link><pubDate>Thu, 28 Apr 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/am-i-too-old-to-become-a-programmer/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;The best time to plant a tree was twenty years ago. The second best time is
now.&amp;rdquo;
&amp;ndash; Chinese proverb&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I mentor adults who are learning to program after serving in the military.
Some are in their late twenties, and some are twice that age. A common concern
is that they are too old to be changing careers to programming.&lt;/p&gt;</description></item><item><title>It's Harder to Read Code Than Write It</title><link>https://jakeworth.com/posts/its-harder-to-read-code-than-write-it/</link><pubDate>Mon, 25 Apr 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/its-harder-to-read-code-than-write-it/</guid><description>&lt;p&gt;In &lt;a href="https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/"&gt;Things You Should Never Do, Part I&lt;/a&gt;, Joel Spolsky narrates
Netscape&amp;rsquo;s ruinous decision to rewrite their browser from scratch. This
introduced the following concept to me: &amp;ldquo;It&amp;rsquo;s harder to read code than to write it.&amp;rdquo; I believe this is true. Today I&amp;rsquo;d like to explain why.&lt;/p&gt;</description></item><item><title>The Problems With Code Screenshots</title><link>https://jakeworth.com/posts/on-code-screenshots/</link><pubDate>Tue, 19 Apr 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/on-code-screenshots/</guid><description>&lt;p&gt;Screenshots of code are common in developer communication, but they come with real drawbacks. Here&amp;rsquo;s why I try to avoid them.&lt;/p&gt;</description></item><item><title>Hash Fetch Instead of If/Else</title><link>https://jakeworth.com/posts/hash-fetch-instead-of-if-else/</link><pubDate>Sat, 16 Apr 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/hash-fetch-instead-of-if-else/</guid><description>&lt;p&gt;Conditional logic has its place, but often there&amp;rsquo;s a better alternative.
Today, we&amp;rsquo;ll look at a Ruby solution: a hash with &lt;code&gt;.fetch&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>First Get It Working, Then Make it Look Good</title><link>https://jakeworth.com/posts/get-it-working-first/</link><pubDate>Wed, 13 Apr 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/get-it-working-first/</guid><description>&lt;p&gt;I recently completed a winter survival course where we built shelters in just
ten minutes with only the contents of our packs. The pack I brought was nearly
empty, so I made a tent out of my parka. It was ugly, but it could have saved
my life. How does this apply to software? When building a feature, first get it
working, then make it look good.&lt;/p&gt;</description></item><item><title>My psql Config</title><link>https://jakeworth.com/posts/my-psql-config/</link><pubDate>Tue, 12 Apr 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/my-psql-config/</guid><description>&lt;p&gt;RC files, thought to stand for &amp;ldquo;run command&amp;rdquo; files, are read by a program
during startup. The file that configures the PostgreSQL REPL psql is called
&lt;code&gt;.psqlrc&lt;/code&gt;. In this post I&amp;rsquo;ll share my personal psql configuration.&lt;/p&gt;</description></item><item><title>Solved! How to Exit Vim "Ex" Mode</title><link>https://jakeworth.com/posts/exit-vim-ex-mode/</link><pubDate>Wed, 06 Apr 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/exit-vim-ex-mode/</guid><description>&lt;p&gt;How does one exit Vim &amp;ldquo;Ex&amp;rdquo; mode? But first&amp;hellip; how did you even get into &amp;ldquo;Ex&amp;rdquo; mode?&lt;/p&gt;</description></item><item><title>How to Read a Stack Trace</title><link>https://jakeworth.com/posts/how-to-read-a-stack-trace/</link><pubDate>Tue, 05 Apr 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/how-to-read-a-stack-trace/</guid><description>&lt;p&gt;A stumbling block for many people when debugging is reading the stack trace.
Today I&amp;rsquo;d like to discuss this important skill.&lt;/p&gt;</description></item><item><title>RSpec.describe vs. describe: Which Should I Use?</title><link>https://jakeworth.com/posts/rspec-describe-vs-describe/</link><pubDate>Sat, 02 Apr 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/rspec-describe-vs-describe/</guid><description>&lt;p&gt;Ruby&amp;rsquo;s RSpec &lt;code&gt;describe&lt;/code&gt; block has two common syntaxes. Which should you use?&lt;/p&gt;</description></item><item><title>Your Demo Doesn't Need Auth</title><link>https://jakeworth.com/posts/your-demo-doesnt-need-auth/</link><pubDate>Fri, 01 Apr 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/your-demo-doesnt-need-auth/</guid><description>&lt;p&gt;When building a demo application, I believe you can often skip authentication.&lt;/p&gt;</description></item><item><title>How Urgent Is This Bug?</title><link>https://jakeworth.com/posts/the-importance-of-a-bug/</link><pubDate>Wed, 30 Mar 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/the-importance-of-a-bug/</guid><description>&lt;p&gt;I remember the first bug that I shipped to production. I was upset that I&amp;rsquo;d
broken something and was anxious to fix it. But I noticed something curious:
the calm demeanor of a senior mentor helping me. They refused to meet my intensity. While the world burned, they wanted to instead discuss the bug and its relative importance.&lt;/p&gt;</description></item><item><title>Debugging Tip: Learning From Bugs</title><link>https://jakeworth.com/posts/learn-from-it/</link><pubDate>Fri, 25 Mar 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/learn-from-it/</guid><description>&lt;p&gt;You were &lt;a href="https://jakeworth.com/posts/dont-stay-stuck/"&gt;stuck&lt;/a&gt;, and now you aren&amp;rsquo;t. Congratulations! Before you move
on, it&amp;rsquo;s vital to stop and learn from it. It&amp;rsquo;s the best way I know to get
better and spare your mind for increasingly harder problems.&lt;/p&gt;</description></item><item><title>How to Make Renames Easy</title><link>https://jakeworth.com/posts/make-renames-easy/</link><pubDate>Tue, 22 Mar 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/make-renames-easy/</guid><description>&lt;p&gt;Names in software are hard. But what&amp;rsquo;s worse than a bad name? Sticking with it
because you can&amp;rsquo;t change it. I want us all to be able to effortlessly and
fearlessly fix bad names. That&amp;rsquo;s the topic of this post.&lt;/p&gt;</description></item><item><title>How to Read Postgres Docs</title><link>https://jakeworth.com/posts/how-to-read-postgres-docs/</link><pubDate>Mon, 21 Mar 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/how-to-read-postgres-docs/</guid><description>&lt;p&gt;Have you ever tried to read the documentation for a Postgres command? Although
many consider Postgres&amp;rsquo; docs best-in-class, they include conventions that might
challenge newbies. In this post, I&amp;rsquo;ll paraphrase Postgres&amp;rsquo; conventions page to
help us understand what the documentation for a command is saying.&lt;/p&gt;</description></item><item><title>Stop Studying, Start Building</title><link>https://jakeworth.com/posts/build/</link><pubDate>Wed, 16 Mar 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/build/</guid><description>&lt;p&gt;If I could give one piece of advice to anyone learning to program: build.&lt;/p&gt;</description></item><item><title>Which Operating System Is the Best for Programming?</title><link>https://jakeworth.com/posts/try-every-os/</link><pubDate>Mon, 14 Mar 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/try-every-os/</guid><description>&lt;p&gt;Which operating system is the best for programming? This is a perennial
question in code boot camps where I&amp;rsquo;ve taught. I think students see the choice
as a fork in the road, and they want pick the right direction. I don&amp;rsquo;t think
there is a right direction. When you&amp;rsquo;re starting out, my advice is to try each
one and choose for yourself.&lt;/p&gt;</description></item><item><title>Autoformat Your Code</title><link>https://jakeworth.com/posts/autoformat-your-code/</link><pubDate>Thu, 10 Mar 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/autoformat-your-code/</guid><description>&lt;p&gt;Auto-formatting code is good, and you should be doing it all the time. Why? It
helps you write better code in real-time, preempt trivial discussions, and maybe even democratize programming.&lt;/p&gt;</description></item><item><title>How I Review Code</title><link>https://jakeworth.com/posts/how-i-review-code/</link><pubDate>Sun, 06 Mar 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/how-i-review-code/</guid><description>&lt;p&gt;Code reviews are important on many teams. Do them well, and your code ships
quickly and safely. Do them poorly, and your code ships slowly and riskily. I
try to contribute good code reviews. In this post, I&amp;rsquo;ll share my process.&lt;/p&gt;</description></item><item><title>How I Make Sure I Understand a Feature Before Building</title><link>https://jakeworth.com/posts/how-i-make-sure-i-understand-a-feature-before-building/</link><pubDate>Wed, 02 Mar 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/how-i-make-sure-i-understand-a-feature-before-building/</guid><description>&lt;p&gt;I think the most important factor in consistent delivery is understanding the
work. When you understand the work, you build what the stakeholder wants,
better and faster.&lt;/p&gt;</description></item><item><title>Don't Stay Stuck</title><link>https://jakeworth.com/posts/dont-stay-stuck/</link><pubDate>Tue, 01 Mar 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/dont-stay-stuck/</guid><description>&lt;p&gt;We&amp;rsquo;ve all seen this: a frustrated coworker hunched over a computer after
hours, flailing alone against some impossible bug. Go home, coworker. Don&amp;rsquo;t stay stuck.&lt;/p&gt;</description></item><item><title>Why Vim</title><link>https://jakeworth.com/posts/why-vim/</link><pubDate>Wed, 23 Feb 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/why-vim/</guid><description>&lt;p&gt;I&amp;rsquo;ve been using, teaching, and stanning &lt;a href="https://www.vim.org/"&gt;Vim&lt;/a&gt; since almost the beginning of my
programming career. Yet, when asked to explain this preference, I stumble. In
this post, I&amp;rsquo;d like to explore why I love Vim.&lt;/p&gt;</description></item><item><title>On Disabling Tests</title><link>https://jakeworth.com/posts/on-disabling-tests/</link><pubDate>Tue, 22 Feb 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/on-disabling-tests/</guid><description>&lt;p&gt;Today I want to talk about a common technique: disabling failing tests to allow
a feature to ship. Maybe sometimes you gotta do it. But long-term I think it
causes more problems than it solves.&lt;/p&gt;</description></item><item><title>Before You Abort, Count to Ten</title><link>https://jakeworth.com/posts/count-to-ten/</link><pubDate>Tue, 15 Feb 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/count-to-ten/</guid><description>&lt;p&gt;Here&amp;rsquo;s a trick that that has helped me as a programmer: before doing anything
major, like killing a process, stop and count to ten.&lt;/p&gt;</description></item><item><title>Avoid Similar Variable Names</title><link>https://jakeworth.com/posts/avoid-similar-variable-names/</link><pubDate>Mon, 14 Feb 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/avoid-similar-variable-names/</guid><description>&lt;p&gt;A common, problematic convention I see in Ruby tests are variable names like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;user_a &lt;span style="color:#f92672"&gt;=&lt;/span&gt; create(&lt;span style="color:#e6db74"&gt;:user&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;last_log_in&lt;/span&gt;: today)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;user_b &lt;span style="color:#f92672"&gt;=&lt;/span&gt; create(&lt;span style="color:#e6db74"&gt;:user&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;last_log_in&lt;/span&gt;: last_year)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Refining Your Terminal Aliases</title><link>https://jakeworth.com/posts/alias-terminal-commands/</link><pubDate>Thu, 10 Feb 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/alias-terminal-commands/</guid><description>&lt;p&gt;Any command you type out manually, or even tab-complete a few times, can be
shortened. A common shortening technique is the terminal alias. Here are some tips that help me write better aliases and cut my terminal keystrokes.&lt;/p&gt;</description></item><item><title>Ruby's Frozen String Literal Comment: YAGNI</title><link>https://jakeworth.com/posts/frozen-string-comment-yagni/</link><pubDate>Wed, 09 Feb 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/frozen-string-comment-yagni/</guid><description>&lt;p&gt;Open a production Ruby file, and you&amp;rsquo;ll often see this magic comment at the
top.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# frozen_string_literal: true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Today I&amp;rsquo;d like to argue that most Ruby files do not need this comment. YAGNI— You
Aren&amp;rsquo;t Going to Need It.&lt;/p&gt;</description></item><item><title>Why I Don't Point Agile Bug Tickets</title><link>https://jakeworth.com/posts/why-i-dont-point-bugs/</link><pubDate>Mon, 07 Feb 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/why-i-dont-point-bugs/</guid><description>&lt;p&gt;When I create Agile bug tickets, I leave the story points blank. Why? Two reasons: pointing bugs creates the wrong incentives, and bugs are hard to estimate.&lt;/p&gt;</description></item><item><title>Weekly Summary Technique for Software Engineers</title><link>https://jakeworth.com/posts/weekly-summary-routine/</link><pubDate>Fri, 04 Feb 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/weekly-summary-routine/</guid><description>&lt;p&gt;&lt;em&gt;&amp;ldquo;What did you do this week?&amp;rdquo;&lt;/em&gt; I&amp;rsquo;ve written a weekly summary for myself and my
teams for years. It helps me think through my work and shows people what I&amp;rsquo;m
working on. In this post, I&amp;rsquo;ll explain how to use this tool.&lt;/p&gt;</description></item><item><title>Opt Into Beta</title><link>https://jakeworth.com/posts/opt-into-beta/</link><pubDate>Wed, 02 Feb 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/opt-into-beta/</guid><description>&lt;p&gt;Here&amp;rsquo;s a technique I&amp;rsquo;ve used on launches: instead of a big scary waterfall, or,
in tandem with a phased release, let customers opt into a new feature.&lt;/p&gt;</description></item><item><title>How to Find a Programming Mentor</title><link>https://jakeworth.com/posts/finding-a-mentor/</link><pubDate>Mon, 31 Jan 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/finding-a-mentor/</guid><description>&lt;p&gt;I have collected a group of mentors over the years. I call on
them frequently to talk through tough problems. I think I&amp;rsquo;m better at my job because of
this regular, impartial outside feedback. I&amp;rsquo;d wish this for everyone! In this post, I&amp;rsquo;ll try to
reverse-engineer the path I took to get here.&lt;/p&gt;</description></item><item><title>Use a Dev Email</title><link>https://jakeworth.com/posts/use-a-dev-email/</link><pubDate>Sat, 29 Jan 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/use-a-dev-email/</guid><description>&lt;p&gt;An engineering technique I recommend: when you sign up for any service, even on
a side project that&amp;rsquo;s just getting off the ground, create an email group called
&lt;code&gt;dev@&amp;lt;your-domain.com&amp;gt;&lt;/code&gt; that forwards to you and any other technologists, and
use that email to sign up.&lt;/p&gt;</description></item><item><title>How to Answer Questions on Stack Overflow</title><link>https://jakeworth.com/posts/answering-questions-on-stack-overflow/</link><pubDate>Thu, 27 Jan 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/answering-questions-on-stack-overflow/</guid><description>&lt;p&gt;Here&amp;rsquo;s my simple framework for answering questions on Stack Overflow that reach and help people and earn reputation.&lt;/p&gt;</description></item><item><title>Want Better Automated Tests? Hard-Code Your Expectations</title><link>https://jakeworth.com/posts/hard-code-your-expectations/</link><pubDate>Tue, 25 Jan 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/hard-code-your-expectations/</guid><description>&lt;p&gt;Hard-coded test expectations have many benefits that I&amp;rsquo;ll explore in this post.&lt;/p&gt;</description></item><item><title>Presence is Boolean</title><link>https://jakeworth.com/posts/presence-is-boolean/</link><pubDate>Mon, 24 Jan 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/presence-is-boolean/</guid><description>&lt;p&gt;When possible, I prefer to use the &lt;em&gt;presence of data&lt;/em&gt; to &lt;em&gt;represent&lt;/em&gt; a boolean, rather than a
boolean itself.&lt;/p&gt;</description></item><item><title>Be a Better Technical Consultant by Saying "I Think That..."</title><link>https://jakeworth.com/posts/i-think-that/</link><pubDate>Wed, 19 Jan 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/i-think-that/</guid><description>&lt;p&gt;An idea I find useful as an individual contributor is starting my consulting
with this phrase: &amp;ldquo;I think that&amp;hellip;&amp;rdquo;. The idea is to let your arguments stand on
their own, rather than appealing to your experience or other authorities.&lt;/p&gt;</description></item><item><title>Bug Reports Are Gold</title><link>https://jakeworth.com/posts/bug-reports-are-gold/</link><pubDate>Sat, 15 Jan 2022 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/bug-reports-are-gold/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Me&lt;/strong&gt;: Hey, I&amp;rsquo;m experiencing an issue with your software. Here&amp;rsquo;s a &lt;a href="https://jakeworth.com/posts/a-perfect-bug-report/"&gt;detailed bug report&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SAAS Engineer&lt;/strong&gt;: What you&amp;rsquo;re describing isn&amp;rsquo;t possible.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Narrator:&lt;/strong&gt; &lt;em&gt;But it was possible.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is a frustrating, unproductive snippet of a conversation I&amp;rsquo;ve had a few times in my
career. What can we learn? Treat bug reports like gold.&lt;/p&gt;</description></item><item><title>Why Getting Good Solves Most Career Problems</title><link>https://jakeworth.com/posts/get-good/</link><pubDate>Wed, 13 Oct 2021 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/get-good/</guid><description>&lt;p&gt;What should you focus on at the beginning of your programming career? My unflashy answer is: being really good at programming.&lt;/p&gt;</description></item><item><title>How to Organize JavaScript Imports</title><link>https://jakeworth.com/posts/javascript-import-opinions/</link><pubDate>Mon, 30 Aug 2021 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/javascript-import-opinions/</guid><description>&lt;p&gt;The &lt;code&gt;import&lt;/code&gt; statements at the top of a JavaScript component file can be a
confusing, duplicative, churning mess. Is there a way to organize them that
makes sense and scales? In this post, I&amp;rsquo;d like to share the way I handle this detail.&lt;/p&gt;</description></item><item><title>Write Better Code by Knowing When Not To Refactor</title><link>https://jakeworth.com/posts/when-should-i-not-refactor/</link><pubDate>Thu, 26 Aug 2021 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/when-should-i-not-refactor/</guid><description>&lt;p&gt;When I review code, I sometimes request that refactoring changes be removed.
Even when I think the changes are are objective improvements, and even when
they support my personal preferences. My reasoning? Refactors are not free.&lt;/p&gt;</description></item><item><title>The Tutorial Anti-Pattern</title><link>https://jakeworth.com/posts/the-tutorial-antipattern/</link><pubDate>Tue, 24 Aug 2021 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/the-tutorial-antipattern/</guid><description>&lt;p&gt;Here&amp;rsquo;s a scenario: you&amp;rsquo;re applying for your first tech job. You&amp;rsquo;ve found a
bunch of hands-on tutorials and you&amp;rsquo;re speeding through them. When
you finish, you upload the code to Github and add a new line to the &amp;lsquo;Projects&amp;rsquo;
section of your resume. Maybe you even deploy the code as a production website.
My advice: stop.&lt;/p&gt;</description></item><item><title>Consultancy Cycles</title><link>https://jakeworth.com/posts/consultancy-cycles/</link><pubDate>Wed, 04 Aug 2021 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/consultancy-cycles/</guid><description>&lt;p&gt;Working at a quality software development consultancy like
&lt;a href="https://hashrocket.com/"&gt;Hashrocket&lt;/a&gt; early in your programming career could be a
game-changing move.&lt;/p&gt;</description></item><item><title>What is the Sub Claim of a JSON Web Token?</title><link>https://jakeworth.com/posts/til-what-is-the-jwt-sub/</link><pubDate>Fri, 02 Apr 2021 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/til-what-is-the-jwt-sub/</guid><description>&lt;p&gt;Today I&amp;rsquo;d like to explain the &lt;code&gt;sub&lt;/code&gt;, or subject, registered claim of a &lt;a href="https://jwt.io/"&gt;JSON Web
Token&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Augmenting an Object With the Proxy Pattern</title><link>https://jakeworth.com/posts/proxy-pattern/</link><pubDate>Fri, 26 Feb 2021 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/proxy-pattern/</guid><description>&lt;p&gt;Let&amp;rsquo;s look at the proxy pattern in Ruby.&lt;/p&gt;</description></item><item><title>Do the Hard Things First</title><link>https://jakeworth.com/posts/do-the-hard-things-first/</link><pubDate>Mon, 25 Jan 2021 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/do-the-hard-things-first/</guid><description>&lt;p&gt;A concept that I admire is &amp;lsquo;Doing the Hard Thing First&amp;rsquo; via
Ben Orenstein. Ben described on the &lt;a href="https://artofproductpodcast.com/episode-50"&gt;Art of Product Podcast Episode
50&lt;/a&gt;. Here&amp;rsquo;s my summary:&lt;/p&gt;
&lt;p&gt;Choose the hard part of the problem, the part you’re unsure about, the part
that success depends on, and solve that first!&lt;/p&gt;</description></item><item><title>Exercism Raindrops in Python</title><link>https://jakeworth.com/posts/exercism-raindrops-in-python/</link><pubDate>Sun, 06 Dec 2020 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/exercism-raindrops-in-python/</guid><description>&lt;p&gt;I&amp;rsquo;ve been learning a bit of Python this Fall to facilitate conversations with a
mentee. In this post, I&amp;rsquo;m going to share the first Python function I&amp;rsquo;ve ever
written, a solution to the &lt;a href="https://exercism.io"&gt;Exercism&lt;/a&gt; challenge
&amp;lsquo;Raindrops&amp;rsquo;.&lt;/p&gt;</description></item><item><title>Programming Resources for Beginners</title><link>https://jakeworth.com/posts/programming-resources-for-beginners/</link><pubDate>Sat, 05 Dec 2020 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/programming-resources-for-beginners/</guid><description>&lt;p&gt;There is a glut of programming information
online. You can&amp;rsquo;t read it all, and you shouldn&amp;rsquo;t, because much of it is
outdated, wrong, or irrelevant to you.&lt;/p&gt;
&lt;p&gt;So, what is the signal in this noise? I recommend aggregators, blogs, pair
programming. And I offer a gentle recommendation against tutorials.&lt;/p&gt;</description></item><item><title>My Annotated Vim Configuration File</title><link>https://jakeworth.com/posts/my-annotated-vimrc/</link><pubDate>Thu, 26 Nov 2020 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/my-annotated-vimrc/</guid><description>&lt;p&gt;I love Vim. Folks who&amp;rsquo;ve programmed with me, or attended a Vim Meetup when I
was an organizer, can attest. When I was learning to code, &lt;a href="https://jakeworth.com/posts/be-fast/"&gt;getting
fast&lt;/a&gt; at Vim changed everything for me. After almost a decade using this editor, here are my personal configurations.&lt;/p&gt;</description></item><item><title>Essays on Programming I Think About a Lot</title><link>https://jakeworth.com/posts/essays-on-programming-i-think-about-a-lot/</link><pubDate>Thu, 29 Oct 2020 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/essays-on-programming-i-think-about-a-lot/</guid><description>&lt;p&gt;Programming is a new and abstract field, and so we place great emphasis on
ideas. When I find one that sticks with me, I end up sharing it again and again. These
are some of my favorites.&lt;/p&gt;</description></item><item><title>My Development Roadmap</title><link>https://jakeworth.com/posts/my-development-roadmap/</link><pubDate>Tue, 20 Oct 2020 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/my-development-roadmap/</guid><description>&lt;p&gt;I&amp;rsquo;ve been working on a development roadmap for my projects, and wanted to share
my process. Consider this my recipe to turn an idea into software.&lt;/p&gt;</description></item><item><title>You Have New Mail</title><link>https://jakeworth.com/posts/you-have-new-mail/</link><pubDate>Fri, 16 Oct 2020 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/you-have-new-mail/</guid><description>&lt;p&gt;Here&amp;rsquo;s a familiar scenario: you open a new terminal, and before the prompt
appears, you see the following.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You have new mail.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;What&amp;rsquo;s going on here?&lt;/p&gt;</description></item><item><title>Duplicate your Development Branch for QA</title><link>https://jakeworth.com/posts/duplicate-your-developent-branch-for-qa/</link><pubDate>Fri, 09 Oct 2020 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/duplicate-your-developent-branch-for-qa/</guid><description>&lt;p&gt;I&amp;rsquo;m working on a team where we keep a clone of the &lt;code&gt;development&lt;/code&gt; branch (the main
place where work is done), used to deploy to a QA environment. The benefits of
this branching technique are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;clone&lt;/code&gt; is isolated from work&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;s easy to tell what was deployed to QA– &lt;code&gt;clone&lt;/code&gt; is the source of truth&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>How I Clean Up JavaScript Dependencies</title><link>https://jakeworth.com/posts/how-i-clean-up-unused-javascript-dependencies/</link><pubDate>Mon, 03 Aug 2020 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/how-i-clean-up-unused-javascript-dependencies/</guid><description>&lt;p&gt;Unused dependencies are bad: they increase the size of your project, slow down
your processes, require upgrades, and send incorrect messages to fellow
developers about what&amp;rsquo;s important. Make your project better by periodically auditing your dependencies, and
removing those that are unused.&lt;/p&gt;</description></item><item><title>My Annual Review 2019</title><link>https://jakeworth.com/posts/my-annual-review-2019/</link><pubDate>Tue, 31 Dec 2019 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/my-annual-review-2019/</guid><description>&lt;p&gt;Here&amp;rsquo;s my annual professional review covering 2018.&lt;/p&gt;</description></item><item><title>Technologist Reading List</title><link>https://jakeworth.com/posts/developer-reading-list/</link><pubDate>Sat, 28 Sep 2019 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/developer-reading-list/</guid><description>&lt;p&gt;Here&amp;rsquo;s my list of favorite programming books.&lt;/p&gt;</description></item><item><title>A Short Introduction to Test-Driven-Development (TDD)</title><link>https://jakeworth.com/posts/intro-to-tdd/</link><pubDate>Wed, 11 Sep 2019 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/intro-to-tdd/</guid><description>&lt;p&gt;I&amp;rsquo;ve practiced TDD (Test-Driven-Development) a lot and feel knowledgable about when it&amp;rsquo;s useful and when it isn&amp;rsquo;t. In this post,
I&amp;rsquo;d like to summarize what I&amp;rsquo;ve learned.&lt;/p&gt;</description></item><item><title>Pangram in TypeScript</title><link>https://jakeworth.com/posts/pangram-in-typescript/</link><pubDate>Mon, 29 Jul 2019 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/pangram-in-typescript/</guid><description>&lt;p&gt;I&amp;rsquo;ve been doing Exercism&amp;rsquo;s TypeScript exercises, and wanted to share my
pangram-checking utility.&lt;/p&gt;</description></item><item><title>JavaScript Equality</title><link>https://jakeworth.com/posts/javascript-equality/</link><pubDate>Tue, 17 Jul 2018 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/javascript-equality/</guid><description>&lt;p&gt;A few weeks ago, I built an app with React.js and create-react-app that I call
&amp;lsquo;JavaScript Equality&amp;rsquo;. &lt;a href="https://javascript-equality.vercel.app/"&gt;View deployment here&lt;/a&gt;. This application demonstrates the JavaScript value-comparison operators &lt;code&gt;==&lt;/code&gt;
and &lt;code&gt;===&lt;/code&gt;. It&amp;rsquo;s inspired by the &lt;a href="https://dorey.github.io/JavaScript-Equality-Table/"&gt;JavaScript Equality Table&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>A Git Workflow to Keep Branches Current and PRs Clean</title><link>https://jakeworth.com/posts/mgrim-everything-updated-all-the-time/</link><pubDate>Wed, 11 Jul 2018 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/mgrim-everything-updated-all-the-time/</guid><description>&lt;p&gt;My current favorite command line alias is &lt;code&gt;mgrim&lt;/code&gt;, composed of four other aliases. Here&amp;rsquo;s what it is, and what it does.&lt;/p&gt;</description></item><item><title>Comprehensive Instructions</title><link>https://jakeworth.com/posts/comprehensive-instructions/</link><pubDate>Mon, 09 Jul 2018 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/comprehensive-instructions/</guid><description>&lt;p&gt;A user opened an issue in Tilex last week that I spent a significant amount of
time thinking about and talking about (thanks JB) before responding to. Here&amp;rsquo;s
the truncated request:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;May I ask you to compile a step-by-step list to set up a running TIL
instance?&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>The Universal Programming Language</title><link>https://jakeworth.com/posts/the-universal-programming-language/</link><pubDate>Sun, 17 Sep 2017 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/the-universal-programming-language/</guid><description>&lt;p&gt;Recently I tried to answer a question that I think is common to consider when
you&amp;rsquo;re first learning about computer programming. I&amp;rsquo;ll paraphrase:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Why can&amp;rsquo;t there be an “universal” programming language that serves all purposes?&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>How I Talk: My Guide to Tech Public Speaking</title><link>https://jakeworth.com/posts/how-i-talk/</link><pubDate>Wed, 09 Aug 2017 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/how-i-talk/</guid><description>&lt;p&gt;I&amp;rsquo;ve been giving technical talks for a few years, and I&amp;rsquo;m speaking at the Vim
Chicago Meetup next month about integrating React with Vim. In this post, I&amp;rsquo;m
going to use that opportunity as an excuse to document my speaking process.&lt;/p&gt;</description></item><item><title>Execution Credibility: Ship, Then Signal</title><link>https://jakeworth.com/posts/its-done/</link><pubDate>Wed, 19 Jul 2017 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/its-done/</guid><description>&lt;p&gt;As soon as you can, just do the thing you have to do, and respond with: &amp;ldquo;It&amp;rsquo;s done.&amp;rdquo;&lt;/p&gt;</description></item><item><title>Don't Build Every Feature</title><link>https://jakeworth.com/posts/dont-build-every-feature/</link><pubDate>Mon, 19 Jun 2017 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/dont-build-every-feature/</guid><description>&lt;p&gt;There&amp;rsquo;s a detail about &lt;a href="https://til.hashrocket.com"&gt;Today I Learned&lt;/a&gt; some might
find unusual: we never added a way to delete posts from the site. Why ignore a
basic CRUD feature? We didn&amp;rsquo;t ignore it. It was intentionally omitted.&lt;/p&gt;</description></item><item><title>Work Small</title><link>https://jakeworth.com/posts/work-small/</link><pubDate>Sat, 10 Jun 2017 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/work-small/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Write programs that do one thing and do it well. –The Unix Philosophy&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I believe in working small.&lt;/p&gt;</description></item><item><title>What We Learned Porting a Rails App to Phoenix</title><link>https://jakeworth.com/posts/tilex-progress/</link><pubDate>Mon, 05 Jun 2017 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/tilex-progress/</guid><description>&lt;p&gt;Tilex, our Phoenix port of &lt;a href="https://til.hashrocket.com"&gt;Today I Learned&lt;/a&gt;, is
coming really well. After a personal hiatus for RailsConf prep, I&amp;rsquo;m back
full-swing. My coworkers have really been bringing quality commits as well, and
I feel we are very close to a successful port.&lt;/p&gt;</description></item><item><title>You Should Blog</title><link>https://jakeworth.com/posts/you-should-blog/</link><pubDate>Sat, 11 Feb 2017 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/you-should-blog/</guid><description>&lt;p&gt;I created this blog to reflect on my code and development as a
programmer. In that spirit, I&amp;rsquo;d like to make a pitch to
anybody reading: you should blog.&lt;/p&gt;</description></item><item><title>Reset an Ecto Heroku Postgres Database</title><link>https://jakeworth.com/posts/reset-an-ecto-heroku-database/</link><pubDate>Sat, 07 Jan 2017 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/reset-an-ecto-heroku-database/</guid><description>&lt;p&gt;We introduced some breaking database changes to our &lt;a href="https://github.com/hashrocket/tilex"&gt;Phoenix port&lt;/a&gt; of &lt;a href="https://til.hashrocket.com"&gt;Today I Learned&lt;/a&gt; on Friday; today I deployed them to staging. Resetting an Ecto Heroku database, with new seed data, turned out to be a little tricky, and I wanted to document what I learned.&lt;/p&gt;</description></item><item><title>Vim Nonrecursive Mappings</title><link>https://jakeworth.com/posts/vim-nonrecursive-mappings/</link><pubDate>Sat, 17 Dec 2016 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/vim-nonrecursive-mappings/</guid><description>&lt;p&gt;My first PR to a new Vim plugin was merged this week, &lt;a href="https://github.com/dillonhafer/vim-termbux/pull/1"&gt;check it
out&lt;/a&gt;, adding non-recursive
Vim mappings to vim-termbux.&lt;/p&gt;</description></item><item><title>Porting TIL from Rails to Phoenix: Initial Commits</title><link>https://jakeworth.com/posts/porting-til-to-phoenix-initial-commits/</link><pubDate>Tue, 29 Nov 2016 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/porting-til-to-phoenix-initial-commits/</guid><description>&lt;p&gt;Last week, I started a new project: porting &lt;a href="https://til.hashrocket.com"&gt;Today I
Learned&lt;/a&gt; from Ruby on Rails to Phoenix (Elixir).&lt;/p&gt;</description></item><item><title>Learn to Test</title><link>https://jakeworth.com/posts/learn-to-test/</link><pubDate>Fri, 15 Jul 2016 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/learn-to-test/</guid><description>&lt;p&gt;What is a skill one could learn to set themselves apart from other entry-level programmers? Testing.&lt;/p&gt;</description></item><item><title>Why Elixir?</title><link>https://jakeworth.com/posts/why-elixir/</link><pubDate>Wed, 06 Jul 2016 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/why-elixir/</guid><description>&lt;p&gt;I&amp;rsquo;ve been learning and using Elixir lately, and loving it. More than once, I&amp;rsquo;ve been asked some version of the question: why are you
learning Elixir? What makes this language unique? I thought I&amp;rsquo;d take a moment and try to distill my rationale.&lt;/p&gt;</description></item><item><title>Writing Elixir Sigils</title><link>https://jakeworth.com/posts/writing-elixir-sigils/</link><pubDate>Mon, 04 Jul 2016 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/writing-elixir-sigils/</guid><description>&lt;p&gt;Sigils are a mechanism for working with textual representations in Elixir. If
you&amp;rsquo;ve ever made an array of Strings in Ruby with &lt;code&gt;%w()&lt;/code&gt;, the API is similar.
A neat feature of sigils is that we can make custom variants, or override
existing Kernel variants. The latter is generally discouraged.&lt;/p&gt;</description></item><item><title>How and Why to Squash Your Pull Request</title><link>https://jakeworth.com/posts/squash-your-pr/</link><pubDate>Sun, 03 Jul 2016 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/squash-your-pr/</guid><description>&lt;p&gt;Many pull requests go through a cycle: programmer opens pull request,
maintainer gives feedback, programmer makes changes, repeat until ready to
merge, maintainer merges. Prior to the merge, the pull request can be messy,
full of reverts, fixups, and WIP commits. In the end, those commits are noise.
We can tell a better story by squashing the branch.&lt;/p&gt;</description></item><item><title>Recreating Elixir's Enum.sum</title><link>https://jakeworth.com/posts/recreating-enumsum/</link><pubDate>Thu, 30 Jun 2016 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/recreating-enumsum/</guid><description>&lt;p&gt;I&amp;rsquo;m learning Elixir, and today as an exercise, I was challenged to recreate &lt;code&gt;Enum.sum&lt;/code&gt; using recursion. Here&amp;rsquo;s
my solution.&lt;/p&gt;</description></item><item><title>Server Side Sorting in Ruby</title><link>https://jakeworth.com/posts/server-side-sorting/</link><pubDate>Tue, 28 Jun 2016 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/server-side-sorting/</guid><description>&lt;p&gt;Recently a friend asked me this question about server-side sorting in Rails. Here&amp;rsquo;s the question
and my answer.&lt;/p&gt;</description></item><item><title>Keyword, Match, and Region in VimScript</title><link>https://jakeworth.com/posts/keyword-match-and-region-in-vimscript/</link><pubDate>Wed, 20 Apr 2016 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/keyword-match-and-region-in-vimscript/</guid><description>&lt;p&gt;After a recent talk I gave that included VimScript, an attendee asked a
question about the differences between &lt;code&gt;keyword&lt;/code&gt;, &lt;code&gt;match&lt;/code&gt;, and &lt;code&gt;region&lt;/code&gt;
following &lt;code&gt;syn&lt;/code&gt; in a Vim syntax highlighting file. Here&amp;rsquo;s my answer.&lt;/p&gt;</description></item><item><title>From One End to the Other in Ruby</title><link>https://jakeworth.com/posts/from-one-end-to-the-other-in-ruby/</link><pubDate>Sun, 06 Mar 2016 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/from-one-end-to-the-other-in-ruby/</guid><description>&lt;p&gt;A while back I tackled the following programming challenge:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;From One End to the Other: Find the smallest possible
(positive) integer that ends in a six such that if that six is removed and
placed in front of the remaining digits of the number, the resulting number
will be four times as large as the original.&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Vim Buffer Problem</title><link>https://jakeworth.com/posts/vim-buffer-problem/</link><pubDate>Sun, 06 Mar 2016 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/vim-buffer-problem/</guid><description>&lt;p&gt;A few weeks back I tackled the following programming challenge from my colleague Josh Branchaud:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Vim Buffer&lt;/p&gt;
&lt;p&gt;I open up a new Vim buffer and type all the numbers 1 to 10,000,
separated by spaces. Then, my cat walks on the keyboard and somehow activates
a substitution command that replaces all the &amp;lsquo;0’ digits (zeros) with spaces.
If I now sum up all the numbers in the buffer, as delineated by spaces, what
is the total?&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Building a Markov-Chain MVP in Ruby</title><link>https://jakeworth.com/posts/ceramic-nation/</link><pubDate>Fri, 11 Sep 2015 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/ceramic-nation/</guid><description>&lt;p&gt;Project announcement! Last night I built a &lt;a href="https://en.wikipedia.org/wiki/Markov_chain"&gt;Markov Chain&lt;/a&gt;-generated
novel, titled &lt;em&gt;Ceramic Nation&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>The N + 1 Problem</title><link>https://jakeworth.com/posts/n-1-problem-and-n-plus/</link><pubDate>Sun, 22 Feb 2015 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/n-1-problem-and-n-plus/</guid><description>&lt;p&gt;Recently, I was thinking about the N + 1 problem. N + 1 is a performance issue in a web application, where a method call unleashes a torrent of database queries.&lt;/p&gt;</description></item><item><title>Ruby Symbol#to_proc</title><link>https://jakeworth.com/posts/ruby-symbolto_proc/</link><pubDate>Fri, 31 Oct 2014 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/ruby-symbolto_proc/</guid><description>&lt;p&gt;What does &lt;code&gt;&amp;amp;:&lt;/code&gt; mean in Ruby? In this post, I&amp;rsquo;ll explain.&lt;/p&gt;</description></item><item><title>The Case for One Computer Monitor</title><link>https://jakeworth.com/posts/one-monitor/</link><pubDate>Mon, 31 Mar 2014 00:00:00 +0000</pubDate><guid>https://jakeworth.com/posts/one-monitor/</guid><description>&lt;p&gt;I have one computer monitor on my desk. Not long ago, this was common, but
today, many people have two, three, or four monitors. In this post, I&amp;rsquo;d like to
make the case that most professional programmers can use just one
monitor.&lt;/p&gt;</description></item></channel></rss>