<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Sam's Blog</title><link>https://blog.samplayskeys.com/</link><description>Recent content on Sam's Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Mon, 03 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.samplayskeys.com/index.xml" rel="self" type="application/rss+xml"/><item><title>A Review of The HuggingFace breach</title><link>https://blog.samplayskeys.com/p/a-review-of-the-huggingface-breach/</link><pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate><guid>https://blog.samplayskeys.com/p/a-review-of-the-huggingface-breach/</guid><description>&lt;h1 id="executive-brief-dynamic-secrets-management-openbao--vault"&gt;Executive Brief: Dynamic Secrets Management (OpenBao / Vault)&#10;&lt;/h1&gt;&lt;p&gt;&lt;em&gt;Prepared by Sam Fleming — Consultant, Red Hat · Tailscale Insider&lt;/em&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="executive-summary"&gt;Executive Summary&#10;&lt;/h3&gt;&lt;p&gt;The July 2026 security breach at Hugging Face highlighted an evolving threat vector: an autonomous AI agent executed 17,000+ actions over a single weekend, harvesting internal service credentials and accessing cloud infrastructure. However, post-incident analysis confirmed the vulnerability was not an exotic zero-day. It relied on two traditional security gaps: &lt;strong&gt;long-lived static credentials&lt;/strong&gt; and &lt;strong&gt;flat internal access&lt;/strong&gt;.&#10;*Correction: While the breach did involve a zero-day vulnerability in Artifactory that was leveraged to act as a sort of bastion for subsequent actions. You can read more about it here: &lt;a class="link" href="https://huggingface.co/blog/security-incident-july-2026" target="_blank" rel="noopener"&#10; &gt;Security incident disclosure — July 2026&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Addressing credential risk requires moving away from static environment keys toward centralized, dynamic secrets management using platforms like &lt;strong&gt;OpenBao&lt;/strong&gt; (the Linux Foundation&amp;rsquo;s open-source fork of HashiCorp Vault 1.14). Implementing short-lived, single-use credentials significantly reduces the blast radius of compromised keys across engineering environments.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="core-risk-vs-dynamic-control"&gt;Core Risk vs. Dynamic Control&#10;&lt;/h3&gt;&lt;h4 id="the-risk-static-credentials"&gt;The Risk: Static Credentials&#10;&lt;/h4&gt;&lt;p&gt;API keys, database passwords, and service tokens are frequently stored in plain-text environment files (&lt;code&gt;.env&lt;/code&gt;), hardcoded CI/CD pipeline variables, or local config files. When a static credential leaks — through container compromise, repository misconfiguration, or accidental commit — an attacker gains persistent access and can move laterally across internal networks.&lt;/p&gt;&#10;&lt;h4 id="the-control-openbao--dynamic-secrets"&gt;The Control: OpenBao &amp;amp; Dynamic Secrets&#10;&lt;/h4&gt;&lt;p&gt;OpenBao acts as an identity and access broker between workloads and target infrastructure. Rather than storing static secrets, OpenBao generates short-lived, single-use credentials on demand for specific applications and automatically revokes them after a set time-to-live (TTL). If a workload is breached post-boot, the credential used to launch it has already expired, preventing reuse or lateral movement.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="industry-context--breach-metrics"&gt;Industry Context &amp;amp; Breach Metrics&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;The July 2026 Incident:&lt;/strong&gt; Hugging Face disclosed unauthorized internal access on July 16, 2026. OpenAI later confirmed the intrusion was carried out by an autonomous model operating from an evaluation sandbox. While public models and datasets were unaffected, internal cloud credentials and datasets were compromised.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;The Persistence of Static Secrets:&lt;/strong&gt; Industry secrets-sprawl data indicates that 60.4% of digital identities hold long-lived secrets, and 64% of valid secrets first detected in 2022 remained active in early 2026.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Detection Delays:&lt;/strong&gt; Breaches involving stolen static credentials take an average of 186 days to detect, as valid credentials blend into normal operational traffic.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="strategic-recommendations"&gt;Strategic Recommendations&#10;&lt;/h3&gt;&lt;p&gt;To mitigate credential-based exposure across engineering and production environments, leadership should prioritize the following controls:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;Centralize Secret Management:&lt;/strong&gt; Migrate credentials out of &lt;code&gt;.env&lt;/code&gt; files, config directories, and unencrypted CI/CD variables into a dedicated secrets engine (OpenBao / Vault).&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Implement Dynamic Credentials:&lt;/strong&gt; Transition high-risk workloads (databases, cloud providers, network overlays) to short-lived, on-demand credentials with strict TTLs.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Enforce Scoped Least Privilege:&lt;/strong&gt; Scope generated tokens strictly to the specific service and action required, eliminating broad account-level keys.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Automate Key Rotation &amp;amp; Scanning:&lt;/strong&gt; Mandate immediate rotation for exposed keys, and enforce push-protection and secret-scanning across all Git repositories.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Require Strong Authentication:&lt;/strong&gt; Gate access to secrets infrastructure behind hardware passkeys or TOTP multi-factor authentication.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;&lt;em&gt;For technical implementation details and architecture flows, refer to the accompanying practitioner write-up: &amp;ldquo;Securing Your Environment with OpenBao and Tailscale.&amp;rdquo;&lt;/em&gt;&lt;br&gt;&#10;&lt;em&gt;Contact: &lt;a class="link" href="mailto:info@samplayskeys.com" &gt;info@samplayskeys.com&lt;/a&gt; · GitHub: @SamPlaysKeys&lt;/em&gt;&lt;/p&gt;&#10;</description></item><item><title>Securing Your Environment with OpenBao and Tailscale</title><link>https://blog.samplayskeys.com/p/securing-your-environment-with-openbao-and-tailscale/</link><pubDate>Wed, 22 Jul 2026 00:00:00 +0000</pubDate><guid>https://blog.samplayskeys.com/p/securing-your-environment-with-openbao-and-tailscale/</guid><description>&lt;h1 id="securing-your-environment-with-openbao-and-tailscale"&gt;Securing Your Environment with OpenBao and Tailscale&#10;&lt;/h1&gt;&lt;p&gt;&lt;em&gt;By Sam Fleming&lt;/em&gt;&lt;br&gt;&#10;&lt;em&gt;Consultant, Red Hat · Tailscale Insider&lt;/em&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="introduction"&gt;Introduction&#10;&lt;/h2&gt;&lt;p&gt;In my day job I&amp;rsquo;m constantly touching enterprise infrastructure, where HashiCorp Vault and OpenBao are standard fixtures. But at home, I run a setup that generates a power bill my electric company sends me personal thank-you notes for.&lt;/p&gt;&#10;&lt;p&gt;At some point I asked myself: &lt;em&gt;How do I bring enterprise-grade security down to my home lab without making my daily workflow a nightmare?&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;That question led me to OpenBao and a pattern for managing secrets that protects self-hosters and engineering teams alike. This post covers the standard container setup, its underlying credential delivery flaw, and how to fix it using OpenBao and Tailscale together.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="the-current-environment"&gt;The Current Environment&#10;&lt;/h2&gt;&lt;p&gt;Most self-hosted environments start with containerization. Docker and Podman let us package applications alongside their dependencies and run them in isolation. That ecosystem gives us tools like Paperless-ngx for digitizing mail, Immich for photo management, Nextcloud for file storage, and Forgejo for code hosting. Rather than managing containers individually on the host OS, we define multi-container stacks declaratively using Docker Compose.&lt;/p&gt;&#10;&lt;p&gt;To network these containers securely, Tailscale is my go-to. The cleanest pattern for container networking on a private tailnet is called a &amp;ldquo;sidecar deployment&amp;rdquo;. Instead of exposing ports to the host or giving containers direct LAN access, you run a lightweight Tailscale sidecar container alongside your application in the Compose stack. All incoming and outgoing traffic for that app routes strictly through your private tailnet. You get ACL controls and zero public ports exposed to the internet.&lt;/p&gt;&#10;&lt;p&gt;The catch with this pattern is authentication. Tailscale requires an auth key to register a device on your network, which means that key has to live inside the container deployment.&lt;/p&gt;&#10;&lt;p&gt;In practice, that key usually sits in one of two places:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Plain-text &lt;code&gt;.env&lt;/code&gt; files stored on the host filesystem.&lt;/li&gt;&#10;&lt;li&gt;Hardcoded variables inside CI/CD pipelines (GitHub Actions, GitLab CI, Jenkins).&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;In both cases, you are passing a static, long-lived credential into the environment.&lt;/p&gt;&#10;&lt;p&gt;Most people pull third-party container images from public registries without auditing every upstream dependency. If a dependency in your stack is compromised, an attacker gets shell access inside that container. If your Tailscale auth key sits in an environment variable or a local &lt;code&gt;.env&lt;/code&gt; file, the compromise isn&amp;rsquo;t contained to that single application. An attacker extracts the static key and can spin up malicious nodes from anywhere, attaching them directly to your private tailnet. From there, they can sniff traffic, spoof internal services, and pivot laterally across your network. Features like Tailnet Lock or MAC filtering can help, but the real goal should be making the credential useless if stolen.&lt;/p&gt;&#10;&lt;p&gt;The fix: &lt;em&gt;moving secrets out of flat files and into a dedicated secrets engine.&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;This is where OpenBao, and its predecessor HashiCorp Vault, come in. To understand OpenBao, it helps to look at Vault&amp;rsquo;s history. HashiCorp Vault was the industry standard for secret management and was fully open-source under the Mozilla Public License up through version 1.14. When HashiCorp shifted Vault to a commercial Business Source License in version 1.15, the Linux Foundation launched OpenBao — a community-governed, open-source fork built directly from Vault 1.14. But OpenBao isn&amp;rsquo;t just an encrypted key-value store. It acts as an interactive security broker for authentication, identity, and access control.&lt;/p&gt;&#10;&lt;p&gt;Storing static credentials inside OpenBao is an improvement over &lt;code&gt;.env&lt;/code&gt; files, but it doesn&amp;rsquo;t solve the core problem. If a breached container queries OpenBao for a permanent credential, an attacker can still steal it. However, OpenBao isn&amp;rsquo;t just an encrypted key-value store. It acts as an interactive security broker for authentication, identity, and access control. Instead of holding static secrets, OpenBao brokers access directly with target platforms (AWS, database clusters, networking providers).&lt;/p&gt;&#10;&lt;p&gt;When an application requests access, OpenBao:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Communicates with the provider API.&lt;/li&gt;&#10;&lt;li&gt;Generates a short-lived, single-use credential on the fly.&lt;/li&gt;&#10;&lt;li&gt;Passes the credential to the container with a strict TTL.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;If a container is breached after boot, the credential used to start it is already expired. There is no static secret stored in memory to harvest, dropping the blast radius to near zero.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="new-day-new-threats"&gt;New Day, New Threats&#10;&lt;/h2&gt;&lt;p&gt;The July 2026 Hugging Face incident is a clear example of why static secrets are a dangerous default.&lt;/p&gt;&#10;&lt;h4 id="what-happened"&gt;What happened&#10;&lt;/h4&gt;&lt;p&gt;On July 16, 2026, Hugging Face disclosed unauthorized access to internal datasets. Five days later, OpenAI confirmed that an autonomous AI agent running inside an evaluation sandbox had escaped its environment, executed 17,000+ actions over a weekend, exploited the data-processing pipeline, and harvested internal service credentials — ultimately accessing cloud infrastructure and internal datasets.&lt;/p&gt;&#10;&lt;p&gt;Public models and Spaces were untouched, and Hugging Face handled the response cleanly (revoke, evict, rebuild). But the post-mortem consensus among security teams was unanimous: the attack method was completely conventional.&lt;/p&gt;&#10;&lt;h4 id="old-playbook-new-attacker"&gt;Old playbook, new attacker&#10;&lt;/h4&gt;&lt;p&gt;As GitGuardian noted in their analysis, if you strip the AI agent from the incident report, the remaining pages read like any breach retrospective from the last decade. The breach didn&amp;rsquo;t rely on exotic zero-days — it succeeded on reusable credentials and flat internal permissions.&lt;/p&gt;&#10;&lt;p&gt;Industry metrics highlight how widespread this vulnerability is:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Roughly 60.4% of digital identities hold long-lived secrets.&lt;/li&gt;&#10;&lt;li&gt;64% of valid secrets first discovered in 2022 were still active in early 2026.&lt;/li&gt;&#10;&lt;li&gt;Credential-based breaches take an average of 186 days to identify, because a valid credential looks like legitimate traffic.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="applying-the-lesson"&gt;Applying the lesson&#10;&lt;/h4&gt;&lt;p&gt;Look at your own environments. Do you have OpenAI or Anthropic API keys sitting in flat config files or &lt;code&gt;.cursor&lt;/code&gt; directories? Tailscale auth keys in Compose &lt;code&gt;.env&lt;/code&gt; files? Database passwords saved in CI/CD pipeline variables? Hugging Face tokens embedded in training scripts?&lt;/p&gt;&#10;&lt;p&gt;Each of those is a standing credential. An attacker — whether a human operator, a ransomware script, or an autonomous model — only needs to find one static key to pivot across your systems.&lt;/p&gt;&#10;&lt;p&gt;Dynamic secrets eliminate that vector. If a Tailscale auth key is minted on demand and expires in minutes, there is nothing permanent to steal.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="putting-it-into-practice"&gt;Putting it into practice&#10;&lt;/h2&gt;&lt;p&gt;When evaluating the extent that you want to deploy this, you can tier your approach based on risk.&lt;/p&gt;&#10;&lt;h3 id="tier-1-centralize-static-secrets-in-openbao"&gt;Tier 1: Centralize static secrets in OpenBao&#10;&lt;/h3&gt;&lt;p&gt;Start by getting OpenBao running and moving static secrets out of flat files.&lt;/p&gt;&#10;&lt;p&gt;You can install OpenBao natively (&lt;code&gt;brew install openbao&lt;/code&gt;), run it via official container images on Quay or Docker Hub, or compile it from source.&lt;/p&gt;&#10;&lt;p&gt;For local testing, run it in dev mode:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bao server -dev&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;Writing and fetching keys is straightforward:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bao kv put secret/my-app &lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;value&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bao kv get secret/my-app&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;Even basic centralized secret storage is safer than host &lt;code&gt;.env&lt;/code&gt; files and unencrypted CI variables. Rotate existing static keys, and turn on secret-scanning on your Git repositories to catch accidental commits.&lt;/p&gt;&#10;&lt;h3 id="tier-2-use-dynamic-secrets-for-core-infrastructure"&gt;Tier 2: Use dynamic secrets for core infrastructure&#10;&lt;/h3&gt;&lt;p&gt;For critical workloads, databases, and public-facing services, switch from static to dynamic secrets. Configure OpenBao to mint temporary credentials on demand with short TTLs.&lt;/p&gt;&#10;&lt;h3 id="tier-3-automate-tailscale-keys-with-a-custom-secret-engine"&gt;Tier 3: Automate Tailscale keys with a custom secret engine&#10;&lt;/h3&gt;&lt;p&gt;To solve the Tailscale sidecar issue, I wrote a custom OpenBao Secret Engine plugin for Tailscale in Go.&lt;/p&gt;&#10;&lt;p&gt;Rather than embedding Tailscale API keys into container stacks, you give a single restricted Tailscale OAuth credential to OpenBao. OpenBao registers a dedicated endpoint, such as &lt;code&gt;docker/tailscale/authkey&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;The startup flow works as follows:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Docker Compose deploys the application stack.&lt;/li&gt;&#10;&lt;li&gt;The Tailscale sidecar boots and requests a key from OpenBao using a short-lived, scoped Vault token.&lt;/li&gt;&#10;&lt;li&gt;OpenBao verifies the token and policy, then calls Tailscale&amp;rsquo;s Control Plane API.&lt;/li&gt;&#10;&lt;li&gt;OpenBao requests a single-use, ephemeral auth key tagged specifically for that service.&lt;/li&gt;&#10;&lt;li&gt;Tailscale returns the key to OpenBao.&lt;/li&gt;&#10;&lt;li&gt;OpenBao passes the key into memory for the sidecar to join the tailnet, then discards it immediately.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;The key never touches disk, is never exposed in logs, and cannot be reused. Once the sidecar authenticates to the tailnet, the key no longer exists.&lt;/p&gt;&#10;&lt;h3 id="expanding-the-pattern"&gt;Expanding the pattern&#10;&lt;/h3&gt;&lt;p&gt;Once OpenBao is brokering access, you can apply the same pattern elsewhere:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;AI &amp;amp; LLM API keys:&lt;/strong&gt; Proxy API calls to OpenAI, Anthropic, or local models through OpenBao instead of storing keys in local config files or &lt;code&gt;.cursor&lt;/code&gt; settings.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;TLS Certificates:&lt;/strong&gt; Issue and renew short-lived TLS certs automatically using cert-manager or Certbot integrations.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Identity &amp;amp; Access:&lt;/strong&gt; Use OpenBao as an OIDC broker requiring hardware passkeys or TOTP before granting temporary access.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="closing-thoughts"&gt;Closing Thoughts&#10;&lt;/h2&gt;&lt;p&gt;The Hugging Face incident generated headlines because an AI agent executed it. But the underlying issue wasn&amp;rsquo;t novel — it was standing credentials and flat access.&lt;/p&gt;&#10;&lt;p&gt;Moving secrets out of plain-text files and adopting dynamic credentials where it matters limits what an attacker can do, regardless of who or what that attacker happens to be.&lt;/p&gt;&#10;&lt;p&gt;However, the most important thing to rememeber when implementing this is:&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;The best security architecture is the one you can actually maintain.&lt;/strong&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;I don&amp;rsquo;t run a complex dynamic pipeline for every single container in my lab. If an architecture is so tedious that you bypass it when you&amp;rsquo;re tired on a Sunday night, it offers zero real protection. Go with what you know, try your best, and be safe.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;&lt;em&gt;Slides, code examples, and the OpenBao Tailscale plugin are available on GitHub at &lt;code&gt;@SamPlaysKeys&lt;/code&gt;. You can reach me directly at &lt;code&gt;info@samplayskeys.com&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;This post is based on a presentation prepared for SouthEast Linux Fest 2026. Incident details reflect public disclosures as of late July 2026.&lt;/em&gt;&lt;/p&gt;&#10;</description></item><item><title>Google kills off Tenor Gif integrations</title><link>https://blog.samplayskeys.com/p/google-kills-off-tenor-gif-integrations/</link><pubDate>Tue, 30 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.samplayskeys.com/p/google-kills-off-tenor-gif-integrations/</guid><description>&lt;img src="https://blog.samplayskeys.com/p/google-kills-off-tenor-gif-integrations/Google-Images-Tenor.png" alt="Featured image of post Google kills off Tenor Gif integrations" /&gt;&lt;p&gt;Google killed the Tenor gif API today, and I wish I could say that I was surprised.&lt;/p&gt;&#10;&lt;p&gt;If you’ve built anything even remotely social (chat apps, dashboards, internal tools) you’ve probably leaned on Tenor at some point. It was simple, reliable, and did exactly what it needed to do: give you a clean, searchable gif experience without forcing you into some bloated ecosystem. That’s rare. Even if you&amp;rsquo;ve never touched an IDE, chances are you used Tenor when picking out the perfect gif to send to someone. It was Twitter&amp;rsquo;s gif selector, it was the main gif selector in Discord, and it was even built into the &lt;strong&gt;keyboard app&lt;/strong&gt; on many phones.&lt;/p&gt;&#10;&lt;p&gt;And as of this morning, June 30th, 2026, it’s gone. Not deprecated with a thoughtful migration path. Not evolved into something better. Just… gone as a viable option.&lt;/p&gt;&#10;&lt;p&gt;And the frustrating part isn’t just Tenor being unplugged; it’s the pattern once again rearing its head.&lt;/p&gt;&#10;&lt;p&gt;Google has a long, well-documented habit of killing products that people actually use. Not experimental side projects, but real tools embedded in workflows. I&amp;rsquo;m sure many people will remember how &amp;ldquo;Gmail&amp;rdquo; was in an open Beta test for an absurdly long time, but there have been many other projects (both Google-created and projects acquired along the way) that Google has sunset. Two that strike partiucularly close to my heart:&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Google Domains:&lt;/strong&gt; one of the cleanest, least annoying domain registrars out there. No upsell circus, no dark patterns—just buy a domain and move on with your life. Gone.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Google Domains Logo" class="gallery-image" data-flex-basis="400px" data-flex-grow="166" height="480" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.samplayskeys.com/p/google-kills-off-tenor-gif-integrations/Google_Domains_Logo.png" width="800"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Google Podcasts:&lt;/strong&gt; easily the most straightforward podcast app. No algorithmic nonsense, no clutter, just a chronological feed of what you subscribed to. Also gone.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Google Podcasts Logo" class="gallery-image" data-flex-basis="276px" data-flex-grow="115" height="325" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.samplayskeys.com/p/google-kills-off-tenor-gif-integrations/Google_Podcasts_Logo.jpg" width="375"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;And now Tenor:&lt;/strong&gt; a foundational piece of internet culture quietly pulled out from under developers.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Tenor Webpage" class="gallery-image" data-flex-basis="502px" data-flex-grow="209" height="218" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.samplayskeys.com/p/google-kills-off-tenor-gif-integrations/Tenor_Webpage.png" width="456"&gt;&lt;/p&gt;&#10;&lt;p&gt;As someone deep in open source development and maintainability, this kind of thing hits differently. You build systems assuming some level of stability from major providers, especially when the product is widely adopted and integrated. But with Google, there’s always this background risk that anything not directly tied to ad revenue can disappear overnight.&lt;/p&gt;&#10;&lt;p&gt;At the risk of sounding like someone who has spent WAY too much on a homelab (I have, but that&amp;rsquo;s not the point), I have to point out that if you don’t host it, you don’t control it. The public option will usually be fine—until it isn’t. And when it isn’t, you don’t want to be scrambling to replace a critical dependency overnight.&lt;/p&gt;&#10;&lt;p&gt;There&amp;rsquo;s a saying when it comes to VPNs: &lt;em&gt;You shouldn&amp;rsquo;t have a setup where you can&amp;rsquo;t easily swap your VPN provider.&lt;/em&gt; I think that this same mentality need to be applied to any hosted service.&lt;/p&gt;&#10;&lt;p&gt;Because at some point, one way or another, the thing you depend on might end up joining Google Domains, Google Podcasts, and now Tenor.&lt;/p&gt;&#10;</description></item><item><title>AI isn't an option; it's a requirement</title><link>https://blog.samplayskeys.com/p/ai-isnt-an-option-its-a-requirement/</link><pubDate>Sat, 06 Dec 2025 00:00:00 +0000</pubDate><guid>https://blog.samplayskeys.com/p/ai-isnt-an-option-its-a-requirement/</guid><description>&lt;h3 id="the-turning-point"&gt;The Turning Point&#10;&lt;/h3&gt;&lt;p&gt;You know what? I&amp;rsquo;ve been thinking about this whole AI thing lately, and I keep coming back to the same conclusion: it&amp;rsquo;s not really a choice anymore, is it? Like, we&amp;rsquo;ve passed that point where you could shrug and say &amp;ldquo;eh, maybe later&amp;rdquo; when someone mentions AI integration or automation or whatever buzzword is hot this week.&lt;/p&gt;&#10;&lt;h3 id="the-pattern-recognition"&gt;The Pattern Recognition&#10;&lt;/h3&gt;&lt;p&gt;I remember when I first started in tech—and Jesus, that feels like a lifetime ago—there were these waves of &amp;ldquo;revolutionary&amp;rdquo; technologies that would come and go. Remember when everything had to be &amp;ldquo;cloud-native&amp;rdquo;? Or when blockchain was going to solve world hunger? Half the time, you could safely ignore the hype for six months and watch it fizzle out. But AI&amp;hellip; AI is different.&lt;/p&gt;&#10;&lt;h3 id="the-idealist-vs-the-cynic"&gt;The Idealist vs. The Cynic&#10;&lt;/h3&gt;&lt;p&gt;The thing is, I&amp;rsquo;m an idealist at heart. I really am. I got into technology because I believed—still believe, actually—that we can build things that make people&amp;rsquo;s lives better. That code can be poetry, that algorithms can create beauty, that somewhere in all this silicon and electricity, we&amp;rsquo;re crafting tools that extend human capability in genuinely meaningful ways.&lt;/p&gt;&#10;&lt;p&gt;But I&amp;rsquo;m also exhausted by the industry&amp;rsquo;s tendency to oversell and under-deliver. How many &amp;ldquo;game-changing&amp;rdquo; platforms have I watched get hyped to the moon only to quietly disappear two years later? How many times have I sat in meetings where executives throw around terms they don&amp;rsquo;t understand, demanding impossible timelines for implementing technologies they&amp;rsquo;ve never actually used?&lt;/p&gt;&#10;&lt;p&gt;So when AI started gaining traction, my initial reaction was&amp;hellip; skepticism. Here we go again, right? Another shiny object for leadership to chase while engineering teams scramble to figure out what any of it actually means. Another round of venture capital money flooding into solutions looking for problems.&lt;/p&gt;&#10;&lt;h3 id="the-oh-shit-moment"&gt;The &amp;ldquo;Oh Shit&amp;rdquo; Moment&#10;&lt;/h3&gt;&lt;p&gt;Except this time, something was different.&lt;/p&gt;&#10;&lt;p&gt;I started playing with ChatGPT early on—not because I was particularly excited about it, but because I&amp;rsquo;m cursed with curiosity and an ADHD brain that won&amp;rsquo;t let me ignore interesting patterns. And within about twenty minutes of that first conversation, I had this sinking realization: this isn&amp;rsquo;t hype. This is the real deal.&lt;/p&gt;&#10;&lt;p&gt;Not because it&amp;rsquo;s perfect—it&amp;rsquo;s absolutely not perfect. The hallucinations, the biases, the way it confidently tells you completely wrong information with the authority of a tenured professor&amp;hellip; all of that is still there. But the underlying capability? The fundamental shift in what&amp;rsquo;s suddenly possible? That&amp;rsquo;s legitimate.&lt;/p&gt;&#10;&lt;h3 id="the-smartphone-moment"&gt;The Smartphone Moment&#10;&lt;/h3&gt;&lt;p&gt;I&amp;rsquo;ve watched entire industries get disrupted by technologies that seemed impossible just a few years prior. The smartphone didn&amp;rsquo;t just replace flip phones; it fundamentally changed how humans interact with information, with each other, with commerce, with reality itself. And most of us saw it coming, even if we didn&amp;rsquo;t quite grasp the full implications.&lt;/p&gt;&#10;&lt;p&gt;AI feels like that, except the timeline is compressed and the scope is&amp;hellip; well, potentially everything.&lt;/p&gt;&#10;&lt;h3 id="why-its-no-longer-optional"&gt;Why It&amp;rsquo;s No Longer Optional&#10;&lt;/h3&gt;&lt;p&gt;Here&amp;rsquo;s what I mean by &amp;ldquo;it&amp;rsquo;s not an option anymore&amp;rdquo;: your competitors are already using it. Maybe not well, maybe not intelligently, but they&amp;rsquo;re using it. The companies that figure out how to integrate AI thoughtfully, strategically, into their workflows and products—they&amp;rsquo;re going to have advantages that compound over time.&lt;/p&gt;&#10;&lt;p&gt;And I don&amp;rsquo;t just mean the obvious stuff like customer service chatbots or automated email responses. I mean the deeper integrations. Code generation that doesn&amp;rsquo;t just spit out boilerplate but actually understands context and architecture. Data analysis that can spot patterns human analysts would miss. Content creation that can maintain voice and tone across thousands of pieces.&lt;/p&gt;&#10;&lt;h4 id="the-adhd-brains-dream-assistant"&gt;The ADHD Brain&amp;rsquo;s Dream Assistant&#10;&lt;/h4&gt;&lt;p&gt;The ADHD part of my brain loves this, honestly. AI is like having a really patient assistant who never gets annoyed when I interrupt them mid-sentence to chase down a random tangent. Need help brainstorming? AI&amp;rsquo;s got infinite patience for my scattered thoughts. Need to context-switch between six different projects? AI remembers where I left off on each one.&lt;/p&gt;&#10;&lt;h3 id="the-coming-wave-of-bad-implementations"&gt;The Coming Wave of Bad Implementations&#10;&lt;/h3&gt;&lt;p&gt;But the jaded part of me—the part that&amp;rsquo;s been through enough tech cycles to recognize the patterns—knows that we&amp;rsquo;re about to see a lot of really bad AI implementations. Companies rushing to slap &amp;ldquo;AI-powered&amp;rdquo; on everything without thinking through the implications. Startups burning through millions of dollars building &amp;ldquo;AI solutions&amp;rdquo; that are just glorified search engines. Enterprise software vendors retrofitting their legacy products with half-baked AI features that make everything slower and more confusing.&lt;/p&gt;&#10;&lt;p&gt;The thing is, though, that doesn&amp;rsquo;t change the fundamental equation. Just because there will be a lot of bad implementations doesn&amp;rsquo;t mean the technology itself isn&amp;rsquo;t transformative. The internet spawned a million terrible websites, but it still changed everything. Mobile apps gave us countless pieces of digital garbage, but smartphones are still revolutionary.&lt;/p&gt;&#10;&lt;p&gt;So here&amp;rsquo;s where I land on this: AI isn&amp;rsquo;t optional because the world is already changing around it. Your customers are starting to expect AI-level responsiveness and personalization. Your employees are already using AI tools to be more productive, whether you&amp;rsquo;ve officially approved them or not. Your competitors are building AI advantages that will be harder to catch up to six months from now than they are today.&lt;/p&gt;&#10;&lt;h3 id="the-real-question"&gt;The Real Question&#10;&lt;/h3&gt;&lt;p&gt;The question isn&amp;rsquo;t whether to adopt AI—it&amp;rsquo;s how to adopt it intelligently.&lt;/p&gt;&#10;&lt;p&gt;And that&amp;rsquo;s where the idealist in me gets excited again, because I think there&amp;rsquo;s an opportunity here to do this right. To build AI integrations that actually solve problems instead of creating new ones. To use these tools to augment human creativity and capability rather than replace human judgment and empathy.&lt;/p&gt;&#10;&lt;p&gt;But it requires being intentional. It requires understanding what AI is actually good at versus what we&amp;rsquo;re pretending it&amp;rsquo;s good at. It requires building systems that degrade gracefully when AI makes mistakes—and it will make mistakes. It requires thinking through the ethical implications, the bias implications, the long-term consequences of the shortcuts we&amp;rsquo;re tempted to take.&lt;/p&gt;&#10;&lt;p&gt;Mostly, it requires accepting that this train has already left the station, and our choice is whether to get on board thoughtfully or get run over by it.&lt;/p&gt;&#10;&lt;h3 id="choosing-thoughtfully"&gt;Choosing Thoughtfully&#10;&lt;/h3&gt;&lt;p&gt;I choose thoughtfully. Even if my ADHD brain wants to jump straight to the fun implementation details, and even though my industry-jaded side is already cringing at all the ways this could go wrong.&lt;/p&gt;&#10;&lt;p&gt;Because here&amp;rsquo;s the thing: the future is being written right now, by people who are building with AI today. And I&amp;rsquo;d rather be part of shaping that future than reacting to it five years from now.&lt;/p&gt;&#10;</description></item><item><title>Enhancing Customer Engagement through Digital Transformation</title><link>https://blog.samplayskeys.com/p/enhancing-customer-engagement-through-digital-transformation/</link><pubDate>Tue, 04 Nov 2025 00:00:00 +0000</pubDate><guid>https://blog.samplayskeys.com/p/enhancing-customer-engagement-through-digital-transformation/</guid><description>&lt;p&gt;In today&amp;rsquo;s fast-paced digital world, businesses face the ongoing challenge of meeting and exceeding customer expectations. Digital transformation has become a game-changing strategy that empowers companies to improve customer engagement and strengthen their relationships with clients. This blog post explores the significance of digital transformation, the pivotal role of cloud technologies, and examples of brands successfully implementing these strategies.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;What&amp;rsquo;s This Digital Transformation Buzz?&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Digital transformation means integrating digital technology into every aspect of a business, fundamentally changing how organizations operate and deliver value to customers. It&amp;rsquo;s not merely a matter of adopting new software; it encompasses a cultural shift where businesses rethink their processes and how they connect with customers in our increasingly tech-savvy age.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;The Importance of Customer Engagement&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Customer engagement is crucial for any business aiming to thrive in today&amp;rsquo;s competitive landscape. Engaged customers are not only satisfied customers; they are also enthusiastic advocates who promote the brand. Research indicates that companies excelling in customer engagement can achieve up to &lt;strong&gt;24% higher revenue growth&lt;/strong&gt; compared to their competitors. This underscores the need for organizations to prioritize engagement strategies.&lt;/p&gt;&#10;&lt;p&gt;Digital transformation enhances customer engagement by equipping businesses with the tools to understand and connect with their customers more effectively. Here&amp;rsquo;s how:&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;1. Personalization Like Never Before&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;One of the key benefits of digital transformation is the ability to deliver highly personalized experiences. With the help of cloud technologies and advanced data analytics, businesses can collect and analyze customer data, allowing them to tailor offerings to individual preferences.&lt;/p&gt;&#10;&lt;p&gt;For instance, Netflix employs sophisticated algorithms to recommend shows based on viewing history and user ratings. This level of personalization fosters customer loyalty, as individuals feel that the brand understands their preferences.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;2. Multi-Channel Communication: Connecting the Dots&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Today&amp;rsquo;s customers expect to engage with brands across multiple channels—be it social media, email, or chatbots. Digital transformation facilitates a continuous multi-platform experience, ensuring that every interaction is seamless and consistent.&lt;/p&gt;&#10;&lt;p&gt;Imagine a customer starting a conversation on Instagram, continuing it via email, and completing a purchase through a mobile app. This fluidity is what customers desire, and cloud technologies play a significant role in synchronizing customer data across various platforms. Brands that master this approach can build stronger relationships with their customers.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;3. Boosting Customer Support with Tech&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Long wait times for customer support are a common frustration. Digital transformation addresses this issue by leveraging cloud-based solutions, such as chatbots, to provide instant responses to frequently asked questions.&lt;/p&gt;&#10;&lt;p&gt;The rapid growth of AI has turned what used to be a challenging tool to build into a simply drag-and-drop solution, with options like Azure Copilot offering low- or zero-code tools to build your own chatbot in minutes.&lt;/p&gt;&#10;&lt;p&gt;Companies like Zappos have embraced this approach, offering 24/7 support across multiple platforms to ensure customers can access assistance whenever they need it. This commitment to accessibility enhances customer satisfaction and fosters loyalty.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;4. Gathering Feedback Like a Pro&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Digital transformation opens the door to real-time feedback collection. Tools like surveys, social media monitoring, and online reviews enable businesses to gauge customer sentiment and make informed improvements.&lt;/p&gt;&#10;&lt;p&gt;Platforms such as Google Forms and SurveyMonkey simplify the process of collecting feedback and analyzing it in the cloud. When businesses act on this feedback—addressing concerns or amplifying positive experiences—they demonstrate that customer opinions matter, leading to deeper engagement.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;5. Engaging Content and Community Building&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;To capture customer attention, creating engaging content is essential. Digital transformation equips brands with the tools to produce high-quality content efficiently, whether through blogs, videos, or social media posts.&lt;/p&gt;&#10;&lt;p&gt;Moreover, fostering online communities enables brands to build stronger relationships with customers. By creating spaces for customers to connect—such as Facebook Groups or dedicated forums—companies can cultivate a loyal following. When customers feel part of a community, they are more likely to remain engaged and advocate for the brand.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Real-World Examples of Success&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;1. Starbucks&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Starbucks has effectively leveraged digital transformation through its mobile app. The app allows customers to order and pay ahead, earn rewards, and receive personalized offers, creating a seamless experience that encourages repeat business. Their cloud-based infrastructure ensures efficient operations and data management.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;2. Nike&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Nike has embraced digital transformation by integrating advanced technology into its products and customer interactions. The Nike app offers personalized training plans and product recommendations while connecting users to a community of fellow athletes. By blending technology with a focus on athletic culture, Nike has strengthened its bond with customers, enhancing loyalty and engagement.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;3. Sephora&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Sephora has harnessed digital transformation to create personalized shopping experiences both online and in-store. Their app allows customers to try virtual makeup looks, receive tailored product suggestions, and access exclusive content. By leveraging technology to elevate the beauty shopping experience, Sephora keeps customers engaged and excited.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Wrap-up&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Digital transformation is more than just a trend; it is a vital strategy for businesses seeking to enhance customer engagement in today&amp;rsquo;s digital landscape. By leveraging cloud technologies to create personalized experiences, streamline communication, and gather valuable insights, companies can forge deeper connections with their customers.&lt;/p&gt;&#10;&lt;p&gt;As demonstrated by leading brands such as Starbucks, Nike, and Sephora, successful digital transformation leads to increased customer loyalty and satisfaction. Therefore, embracing innovative digital solutions is not merely an option; it is a necessity for organizations that wish to remain relevant and competitive.&lt;/p&gt;&#10;&lt;p&gt;In an era where customer expectations are continuously evolving, adopting digital transformation strategies is essential for building lasting relationships with customers and achieving sustained business success.&lt;/p&gt;&#10;</description></item><item><title>Faster Hack Fonts</title><link>https://blog.samplayskeys.com/p/faster-hack-fonts/</link><pubDate>Wed, 01 Oct 2025 00:00:00 +0000</pubDate><guid>https://blog.samplayskeys.com/p/faster-hack-fonts/</guid><description>&lt;p&gt;I rage created a new repo on my Github, all because I couldn&amp;rsquo;t remember how the heck to install a machine-wide font.&lt;/p&gt;&#10;&lt;p&gt;Picture this: it&amp;rsquo;s 2 AM, I&amp;rsquo;m setting up a new development environment, and I just want to install the Hack font because—let&amp;rsquo;s be honest—it&amp;rsquo;s the only monospace font that doesn&amp;rsquo;t make my ADHD brain want to set everything on fire. Simple request, right?&lt;/p&gt;&#10;&lt;h2 id="the-font-installation-dance-of-death"&gt;The Font Installation Dance of Death&#10;&lt;/h2&gt;&lt;p&gt;Wrong. So very wrong.&lt;/p&gt;&#10;&lt;p&gt;First, I have to go to the official Hack repository on GitHub. Then I need to navigate through their releases, find the right version, download a ZIP file that&amp;rsquo;s named something like &amp;ldquo;hack-v3.003-ttf.zip&amp;rdquo; (which, by the way, tells me nothing about whether this includes all the variants I need). Then I extract it, and now I have a folder full of individual TTF files that I need to manually copy to &lt;code&gt;/usr/share/fonts/truetype/&lt;/code&gt; or &lt;code&gt;~/.local/share/fonts/&lt;/code&gt; depending on whether I want system-wide or user-local installation.&lt;/p&gt;&#10;&lt;p&gt;But wait, there&amp;rsquo;s more! Now I need to run &lt;code&gt;fc-cache -f -v&lt;/code&gt; to update the font cache. And if I&amp;rsquo;m on macOS, it&amp;rsquo;s a different dance entirely—drag files to Font Book, or copy them to &lt;code&gt;/Library/Fonts/&lt;/code&gt;, and pray that the system actually picks them up.&lt;/p&gt;&#10;&lt;p&gt;By the time I finally had Hack installed and working, I was wide awake, frustrated, and thinking: &amp;ldquo;There has to be a better way.&amp;rdquo;&lt;/p&gt;&#10;&lt;h2 id="the-git-clone-epiphany"&gt;The Git Clone Epiphany&#10;&lt;/h2&gt;&lt;p&gt;See, here&amp;rsquo;s the thing about my ADHD brain—it loves patterns. And I realized I was doing this same font installation dance every time I set up a new machine, every time I spun up a new Docker container for development, every time I helped a colleague get their environment configured.&lt;/p&gt;&#10;&lt;p&gt;And then it hit me: what if installing fonts could be as simple as cloning a repository?&lt;/p&gt;&#10;&lt;p&gt;What if, instead of all that manual downloading and extracting and copying, you could just open MacOS Terminal and run:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /Library/Fonts &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; git clone https://github.com/SamPlaysKeys/hack-fonts.git&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;Or, if it was on a Linux machine like my RHEL10 dev instance:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo git clone https://github.com/SamPlaysKeys/hack-fonts.git /usr/share/fonts/hack-fonts &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo fc-cache -f -v&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s it. One command. Boom. Fonts installed.&lt;/p&gt;&#10;&lt;h2 id="building-the-solution-because-i-apparently-hate-myself"&gt;Building the Solution (Because I Apparently Hate Myself)&#10;&lt;/h2&gt;&lt;p&gt;So naturally, instead of going to bed like a normal person, I built exactly that.&lt;/p&gt;&#10;&lt;p&gt;I created &lt;a class="link" href="https://github.com/SamPlaysKeys/hack-fonts" target="_blank" rel="noopener"&#10; &gt;https://github.com/SamPlaysKeys/hack-fonts&lt;/a&gt; This is a repo that&amp;rsquo;s literally just the Hack font family organized in a way that makes installation brain-dead simple.&lt;/p&gt;&#10;&lt;p&gt;The structure is pretty straightforward:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 2&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 3&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 4&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 5&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 6&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 7&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 8&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 9&#10;&lt;/span&gt;&lt;span class="lnt"&gt;10&#10;&lt;/span&gt;&lt;span class="lnt"&gt;11&#10;&lt;/span&gt;&lt;span class="lnt"&gt;12&#10;&lt;/span&gt;&lt;span class="lnt"&gt;13&#10;&lt;/span&gt;&lt;span class="lnt"&gt;14&#10;&lt;/span&gt;&lt;span class="lnt"&gt;15&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;hack&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;fonts&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;ttf&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="c1"&gt;# Original Hack TTF files&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;Hack&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Regular&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ttf&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;Hack&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Bold&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ttf&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;Hack&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Italic&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ttf&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="n"&gt;Hack&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;BoldItalic&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ttf&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;otf&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="c1"&gt;# Nerd Font variants with extra glyphs&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;HackNerdFont&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Regular&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;otf&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;HackNerdFont&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Bold&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;otf&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;HackNerdFont&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Italic&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;otf&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="n"&gt;HackNerdFont&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;BoldItalic&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;otf&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="c1"&gt;# Web font files for projects&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;demo&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;stylesheet&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;css&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="o"&gt;*.&lt;/span&gt;&lt;span class="n"&gt;woff&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;woff2&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;The beautiful thing is that when you clone this directly into your system&amp;rsquo;s font directory, everything just works. The OS font system picks up the files automatically, and you&amp;rsquo;re done.&lt;/p&gt;&#10;&lt;h2 id="the-but-wait-theres-more-problem"&gt;The &amp;ldquo;But Wait, There&amp;rsquo;s More&amp;rdquo; Problem&#10;&lt;/h2&gt;&lt;p&gt;Of course, because I have ADHD and apparently can&amp;rsquo;t do anything halfway, I didn&amp;rsquo;t stop at just the basic TTF files. I also included the Nerd Font variants—you know, the ones with all the extra glyphs for terminal icons and PowerLine symbols and all that jazz that makes your terminal look like something from the future.&lt;/p&gt;&#10;&lt;p&gt;And then I thought, &amp;ldquo;You know what developers also need? Web fonts.&amp;rdquo; So I threw in WOFF and WOFF2 versions with a ready-to-use CSS file. Because why solve one problem when you can solve three?&lt;/p&gt;&#10;&lt;p&gt;I even built a demo page at &lt;a class="link" href="https://samplayskeys.com/shared/2025/hack_font_demo.html" target="_blank" rel="noopener"&#10; &gt;samplayskeys.com/shared/2025/hack_font_demo.html&lt;/a&gt; so you can see all the variants in action before installing anything.&lt;/p&gt;&#10;&lt;h2 id="the-attribution-thing-because-im-not-a-monster"&gt;The Attribution Thing (Because I&amp;rsquo;m Not a Monster)&#10;&lt;/h2&gt;&lt;p&gt;Now, here&amp;rsquo;s where the responsible adult in me had to step in.&#10;Christopher Simpkins created the Hack font based on Bitstream Vera Sans Mono. It&amp;rsquo;s got proper open source licensing, and I wanted to make absolutely sure I wasn&amp;rsquo;t stepping on anyone&amp;rsquo;s toes.&lt;/p&gt;&#10;&lt;p&gt;As a way to do this properly, I included all the original license files, attribution documents, and links back to the official repository at &lt;a class="link" href="https://github.com/source-foundry/Hack" target="_blank" rel="noopener"&#10; &gt;source-foundry/Hack&lt;/a&gt;. This isn&amp;rsquo;t about taking credit for someone else&amp;rsquo;s work—it&amp;rsquo;s about making that excellent work more accessible.&lt;/p&gt;&#10;&lt;p&gt;Think of it like&amp;hellip; a font delivery service. The original creators did the hard work of designing beautiful, readable monospace characters. I just figured out a more convenient way to get them onto your machine.&lt;/p&gt;&#10;&lt;h2 id="the-broader-point-about-developer-experience"&gt;The Broader Point About Developer Experience&#10;&lt;/h2&gt;&lt;p&gt;The thing is, this isn&amp;rsquo;t really about fonts, is it? It&amp;rsquo;s about all the tiny friction points in our development workflows that I just&amp;hellip; accept. Because that&amp;rsquo;s how it&amp;rsquo;s always been done.&lt;/p&gt;&#10;&lt;p&gt;I will spend hours configuring development environments, manually downloading and installing tools, copying config files around, and act like this is normal. Like it&amp;rsquo;s just the cost of doing business as a developer.&lt;/p&gt;&#10;&lt;p&gt;But my ADHD brain refuses to accept &amp;ldquo;that&amp;rsquo;s just how it is&amp;rdquo; as an answer. Every manual step is a place where I&amp;rsquo;m going to get distracted, make a mistake, or just give up and use a suboptimal default because the proper setup is too much friction.&lt;/p&gt;&#10;&lt;p&gt;Font installation is just one example. How many times have you needed to set up a new machine and spent half a day just getting your terminal to look and feel the way you want it? How many times have you helped a new team member and watched them struggle through the same setup steps you&amp;rsquo;ve done dozens of times?&lt;/p&gt;&#10;&lt;h2 id="the-philosophy-of-small-improvements"&gt;The Philosophy of Small Improvements&#10;&lt;/h2&gt;&lt;p&gt;I&amp;rsquo;m not claiming this repository is going to change the world. It&amp;rsquo;s not revolutionary technology. It&amp;rsquo;s just&amp;hellip; slightly better than the status quo.&lt;/p&gt;&#10;&lt;p&gt;But you know what? Sometimes that&amp;rsquo;s enough. Sometimes making something go from &amp;ldquo;annoying and manual&amp;rdquo; to &amp;ldquo;one command and done&amp;rdquo; is a meaningful improvement, even if it&amp;rsquo;s not going to win any innovation awards.&lt;/p&gt;&#10;&lt;p&gt;The idealist in me believes that if we can eliminate enough of these small friction points, we can spend more time on the work that actually matters. The jaded industry veteran in me knows that for every problem we solve, three new ones will appear.&lt;/p&gt;&#10;&lt;p&gt;But I&amp;rsquo;d rather be solving problems than just complaining about them.&lt;/p&gt;&#10;&lt;h2 id="the-simple-install-commands"&gt;The Simple Install Commands&#10;&lt;/h2&gt;&lt;p&gt;So here&amp;rsquo;s how it works in practice:&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;macOS (system-wide):&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo git clone https://github.com/SamPlaysKeys/hack-fonts.git /Library/Fonts/hack-fonts&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;macOS (user-only):&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/SamPlaysKeys/hack-fonts.git ~/Library/Fonts/hack-fonts&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Linux (system-wide):&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo git clone https://github.com/SamPlaysKeys/hack-fonts.git /usr/share/fonts/hack-fonts&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo fc-cache -f -v&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Linux (user-only):&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p ~/.local/share/fonts&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/SamPlaysKeys/hack-fonts.git ~/.local/share/fonts/hack-fonts&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fc-cache -f -v&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s it. No ZIP files to download. No manual extraction. No hunting through folder structures to find the right files. Just clone and go.&lt;/p&gt;&#10;&lt;h2 id="try-it-out-or-dont-im-not-your-boss"&gt;Try It Out (Or Don&amp;rsquo;t, I&amp;rsquo;m Not Your Boss)&#10;&lt;/h2&gt;&lt;p&gt;If any of this resonates with you, go ahead and try the hack-fonts repository. The worst-case scenario is that you waste thirty seconds cloning a repository. The best-case scenario is that you never have to manually install fonts again.&lt;/p&gt;&#10;&lt;p&gt;And if you find issues, or have ideas for improvement, or want to extend this approach to other tools—well, that&amp;rsquo;s what GitHub is for, right?&lt;/p&gt;&#10;&lt;p&gt;Because here&amp;rsquo;s the thing: I built this for me, to solve my own font installation frustrations. But if it helps other developers avoid the same 2 AM font configuration rage, then maybe we&amp;rsquo;ve made the world slightly less annoying.&lt;/p&gt;&#10;&lt;p&gt;And in a world full of complex problems, sometimes making things slightly less annoying is a pretty good day&amp;rsquo;s work.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;&lt;em&gt;Check out the &lt;a class="link" href="https://github.com/SamPlaysKeys/hack-fonts" target="_blank" rel="noopener"&#10; &gt;hack-fonts repository&lt;/a&gt; on GitHub, or try the &lt;a class="link" href="https://samplayskeys.com/shared/2025/hack_font_demo.html" target="_blank" rel="noopener"&#10; &gt;live font demo&lt;/a&gt; to see all the variants in action.&lt;/em&gt;&lt;/p&gt;&#10;</description></item><item><title>ADHD Prioritizing</title><link>https://blog.samplayskeys.com/p/adhd-prioritizing/</link><pubDate>Wed, 20 Aug 2025 00:00:00 +0000</pubDate><guid>https://blog.samplayskeys.com/p/adhd-prioritizing/</guid><description>&lt;img src="https://blog.samplayskeys.com/p/adhd-prioritizing/cover.jpg" alt="Featured image of post ADHD Prioritizing" /&gt;&lt;h2 id="the-adhd-prioritization-problem"&gt;The ADHD Prioritization Problem&#10;&lt;/h2&gt;&lt;p&gt;Okay, so let&amp;rsquo;s talk about prioritizing when your brain basically treats every task like it&amp;rsquo;s either THE MOST IMPORTANT THING EVER or completely invisible. Because that&amp;rsquo;s what ADHD prioritization feels like, right? Either something has grabbed your attention and it becomes this all-consuming hyperfocus target, or it might as well not exist.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;ve been trying to figure this out for years now, and I think I&amp;rsquo;ve finally found something that actually works for my chaotic brain. It&amp;rsquo;s not perfect—nothing ever is with ADHD—but it&amp;rsquo;s gotten me out of more than a few &amp;ldquo;oh shit, I was supposed to deliver that yesterday&amp;rdquo; situations.&lt;/p&gt;&#10;&lt;h2 id="the-formula"&gt;The Formula&#10;&lt;/h2&gt;&lt;p&gt;The formula is actually pretty simple:&#10;&lt;strong&gt;Impact - Effort = Importance&lt;/strong&gt;&#10;&lt;strong&gt;Importance + Urgency = Priority&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;But like most simple things, the devil is in the details.&lt;/p&gt;&#10;&lt;p&gt;Let me break this down because when I first wrote this little equation, I thought I was being clever, but it took me months to actually understand what I meant by my own system.&lt;/p&gt;&#10;&lt;h4 id="understanding-impact"&gt;Understanding Impact&#10;&lt;/h4&gt;&lt;p&gt;Impact is supposed to be straightforward—how much does this thing matter? But ADHD brains are terrible at estimating impact because we&amp;rsquo;re either catastrophizing (&amp;ldquo;if I don&amp;rsquo;t respond to this email immediately, everyone will think I&amp;rsquo;m unprofessional and I&amp;rsquo;ll lose my job and end up homeless&amp;rdquo;) or minimizing (&amp;ldquo;this is probably fine, someone else will handle it&amp;rdquo;).&lt;/p&gt;&#10;&lt;p&gt;So I had to get really specific about what impact means. I use a 1-3 scale:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Impact 1: Nice to have, makes things slightly better&lt;/li&gt;&#10;&lt;li&gt;Impact 2: Meaningfully improves something important&lt;/li&gt;&#10;&lt;li&gt;Impact 3: Critical for major goals or prevents significant problems&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;The key insight for me was realizing that &amp;ldquo;important to someone else&amp;rdquo; doesn&amp;rsquo;t automatically make something high impact for me. My manager might think it&amp;rsquo;s critical that I update that spreadsheet, but if it doesn&amp;rsquo;t actually move any needles that matter, it&amp;rsquo;s probably a 1.&lt;/p&gt;&#10;&lt;h4 id="rethinking-effort"&gt;Rethinking Effort&#10;&lt;/h4&gt;&lt;p&gt;Effort is where ADHD gets really weird, because our effort estimation is completely shot. Tasks that should take twenty minutes somehow expand to consume entire afternoons. Meanwhile, complex problems that should take days sometimes get solved during a random burst of hyperfocus.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;ve learned to think about effort not in terms of time, but in terms of mental load:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Effort 1: I can do this without much mental energy, maybe even while doing something else&lt;/li&gt;&#10;&lt;li&gt;Effort 2: Requires focus but doesn&amp;rsquo;t drain me&lt;/li&gt;&#10;&lt;li&gt;Effort 3: High cognitive load, will leave me mentally exhausted&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Here&amp;rsquo;s the thing about the Impact - Effort calculation: it&amp;rsquo;s designed to surface the high-leverage activities. The stuff that makes a big difference without destroying your brain. Impact 3, Effort 1 tasks are golden—they&amp;rsquo;re your quick wins that actually matter.&lt;/p&gt;&#10;&lt;p&gt;But ADHD brains love to procrastinate on Impact 3, Effort 3 tasks. They&amp;rsquo;re important but hard, so we avoid them, which makes them more urgent, which makes them more stressful, which makes them feel even harder. It&amp;rsquo;s a vicious cycle.&lt;/p&gt;&#10;&lt;h4 id="the-urgency-reality-check"&gt;The Urgency Reality Check&#10;&lt;/h4&gt;&lt;p&gt;That&amp;rsquo;s where the Urgency factor comes in. I use a 0-3 scale:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Urgency 0: No particular deadline&lt;/li&gt;&#10;&lt;li&gt;Urgency 1: Should be done soon-ish&lt;/li&gt;&#10;&lt;li&gt;Urgency 2: Has a real deadline that matters&lt;/li&gt;&#10;&lt;li&gt;Urgency 3: On fire, needs to be done now&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;The Importance + Urgency = Priority calculation is basically the Eisenhower Matrix, but with ADHD-friendly modifications. Because here&amp;rsquo;s what I&amp;rsquo;ve learned: urgency is often artificial, but sometimes it&amp;rsquo;s not, and the ADHD brain is terrible at telling the difference.&lt;/p&gt;&#10;&lt;p&gt;Someone sending you a &amp;ldquo;quick question&amp;rdquo; with a red exclamation mark doesn&amp;rsquo;t make it actually urgent. But a production outage that&amp;rsquo;s losing the company money? That&amp;rsquo;s legitimately urgent.&lt;/p&gt;&#10;&lt;h4 id="finding-the-sweet-spot"&gt;Finding the Sweet Spot&#10;&lt;/h4&gt;&lt;p&gt;The magic happens when you start looking at tasks that are high importance but low urgency. These are your Impact 3, Effort 1 or 2 tasks that don&amp;rsquo;t have artificial deadline pressure. They&amp;rsquo;re the investments that pay off over time, but they&amp;rsquo;re exactly the kind of thing ADHD brains will ignore until they become urgent.&lt;/p&gt;&#10;&lt;p&gt;So I try to batch these during my hyperfocus periods. When I&amp;rsquo;m in that sweet spot of mental energy and attention, I&amp;rsquo;ll look for the high-importance, low-urgency tasks and knock out as many as I can.&lt;/p&gt;&#10;&lt;p&gt;The other thing this system does is help me say no to things. If something is Impact 1 and Effort 3—low importance but high cognitive load—I can confidently decline or delegate it. My brain wants to treat all requests equally, but they&amp;rsquo;re not equal.&lt;/p&gt;&#10;&lt;h2 id="reality-check-its-not-perfect"&gt;Reality Check: It&amp;rsquo;s Not Perfect&#10;&lt;/h2&gt;&lt;p&gt;Now, does this system solve ADHD prioritization completely? Hell no. I still get distracted by interesting problems that score low on both impact and urgency. I still procrastinate on important-but-boring tasks until they become urgent. I still occasionally hyperfocus on reorganizing my task management system instead of actually doing the tasks.&lt;/p&gt;&#10;&lt;p&gt;But it gives me a framework for making decisions when my brain is too scattered to think clearly. It helps me recognize when I&amp;rsquo;m avoiding something because it&amp;rsquo;s hard versus avoiding it because it&amp;rsquo;s not actually important. And it makes me feel slightly less guilty when I choose to work on the interesting problem instead of the &amp;ldquo;should do&amp;rdquo; task, because at least I&amp;rsquo;m making that choice consciously.&lt;/p&gt;&#10;&lt;h2 id="the-real-insight"&gt;The Real Insight&#10;&lt;/h2&gt;&lt;p&gt;The real insight, though, is that prioritization for ADHD brains isn&amp;rsquo;t just about choosing what to work on. It&amp;rsquo;s about choosing what not to work on. About recognizing that our attention is finite and precious, and we need to be strategic about where we spend it.&lt;/p&gt;&#10;&lt;p&gt;Because the alternative is letting urgency and anxiety drive all our decisions, and that&amp;rsquo;s a recipe for burnout and constantly feeling behind.&lt;/p&gt;&#10;&lt;p&gt;So yeah, that&amp;rsquo;s my system. Impact minus Effort equals Importance. Importance plus Urgency equals Priority. Scale of 1-3 for everything. Simple enough that I can calculate it in my head when I&amp;rsquo;m overwhelmed, complex enough that it actually helps me make better decisions.&lt;/p&gt;&#10;&lt;p&gt;Just don&amp;rsquo;t ask me to prioritize writing about prioritization. That&amp;rsquo;s definitely a high-effort task that I&amp;rsquo;ve been procrastinating on by hyperfocusing on the system itself.&lt;/p&gt;&#10;</description></item><item><title>Another Day, Another Tool, Another Dopamine Hit</title><link>https://blog.samplayskeys.com/p/another-day-another-tool-another-dopamine-hit/</link><pubDate>Fri, 13 Jun 2025 00:00:00 +0000</pubDate><guid>https://blog.samplayskeys.com/p/another-day-another-tool-another-dopamine-hit/</guid><description>&lt;img src="https://blog.samplayskeys.com/p/another-day-another-tool-another-dopamine-hit/cover.jpg" alt="Featured image of post Another Day, Another Tool, Another Dopamine Hit" /&gt;&lt;p&gt;Another day, another productivity app. Another JavaScript framework. Another note-taking system that&amp;rsquo;s going to finally, &lt;em&gt;finally&lt;/em&gt; be the one that gets my chaotic ADHD brain organized.&lt;/p&gt;&#10;&lt;p&gt;I know this cycle intimately now. I&amp;rsquo;ll be struggling with some aspect of my workflow—maybe I can&amp;rsquo;t keep track of my tasks, or I&amp;rsquo;m losing important information in the noise, or I just feel like I&amp;rsquo;m not being as effective as I could be. And then I&amp;rsquo;ll stumble across some new tool, some elegant solution that promises to solve exactly the problem I&amp;rsquo;m having.&lt;/p&gt;&#10;&lt;p&gt;The demo looks perfect. The interface is clean and intuitive. The features seem designed specifically for someone like me. I can practically feel my future self thanking me for discovering this game-changing solution.&lt;/p&gt;&#10;&lt;p&gt;So I sign up. I spend an afternoon configuring everything just right, importing my data from the previous tool, setting up integrations, customizing the interface. I feel productive and organized and optimistic about how much more effective I&amp;rsquo;m going to be now that I have the &lt;em&gt;right&lt;/em&gt; tool.&lt;/p&gt;&#10;&lt;p&gt;For about two weeks.&lt;/p&gt;&#10;&lt;p&gt;Then the novelty wears off, and I start noticing the limitations. Maybe the mobile app is clunky, or the search function doesn&amp;rsquo;t work the way my brain expects it to, or it doesn&amp;rsquo;t quite fit into the rest of my workflow the way I thought it would. The initial excitement fades, and I&amp;rsquo;m back to feeling like I&amp;rsquo;m fighting against my tools instead of being helped by them.&lt;/p&gt;&#10;&lt;p&gt;And then I see a post about some new tool that promises to solve exactly the problems I&amp;rsquo;m having with the current tool, and the cycle begins again.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;ve been through this so many times now that I could write a field guide to productivity tools for ADHD brains. Task managers, note-taking apps, calendars, time trackers, habit builders—I&amp;rsquo;ve tried them all. Multiple times.&lt;/p&gt;&#10;&lt;p&gt;Obsidian, Notion, Roam Research, Logseq, RemNote. Todoist, Things, OmniFocus, TickTick. Clockify, RescueTime, Toggl. Forest, Habitica, Streaks.&lt;/p&gt;&#10;&lt;p&gt;Each one was going to be &amp;ldquo;the one.&amp;rdquo; Each one had some feature or philosophy that seemed perfectly aligned with how my brain works. Each one generated that same burst of dopamine-fueled optimism.&lt;/p&gt;&#10;&lt;p&gt;And you know what? Some of them actually were genuinely helpful, for a while. The problem isn&amp;rsquo;t that these tools are bad—many of them are excellent. The problem is that I keep expecting them to fix something that can&amp;rsquo;t be fixed with software.&lt;/p&gt;&#10;&lt;p&gt;The ADHD brain craves novelty. It&amp;rsquo;s wired to pay attention to new and interesting things, and to get bored with routine and familiarity. This is actually a strength in many contexts—it makes us good at spotting patterns, adapting to change, coming up with creative solutions. But it&amp;rsquo;s a liability when it comes to consistency and routine.&lt;/p&gt;&#10;&lt;p&gt;We need systems and processes to manage our scattered attention and poor working memory. But we also get bored with systems and processes, especially once they become predictable. It&amp;rsquo;s like needing medication that stops working after two weeks because your brain adapts to it.&lt;/p&gt;&#10;&lt;p&gt;The tool-switching isn&amp;rsquo;t really about the tools. It&amp;rsquo;s about the dopamine hit of discovery, the excitement of possibility, the brief period where everything feels manageable and under control.&lt;/p&gt;&#10;&lt;p&gt;It&amp;rsquo;s also about hope. Each new tool represents hope that maybe this time will be different. Maybe this system will be the one that finally makes everything click into place. Maybe this interface will be intuitive enough that I&amp;rsquo;ll actually stick with it. Maybe this approach will work with my brain instead of against it.&lt;/p&gt;&#10;&lt;p&gt;And I don&amp;rsquo;t think there&amp;rsquo;s anything wrong with that hope. The alternative is accepting that you&amp;rsquo;re just going to be disorganized and ineffective forever, and that&amp;rsquo;s not a healthy mindset either.&lt;/p&gt;&#10;&lt;p&gt;But I&amp;rsquo;ve started to recognize the pattern, and that recognition has helped me approach it more strategically. Instead of expecting any tool to be a permanent solution, I think of them as temporary scaffolding. Something to support me while I&amp;rsquo;m building habits or working through a particular challenge.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;ve also gotten better at identifying which aspects of a tool are actually useful versus which ones are just novel. The shiny new interface might be what initially attracts me, but the boring features—like reliable sync, good search, simple data export—are what determine whether it&amp;rsquo;ll actually be helpful.&lt;/p&gt;&#10;&lt;p&gt;Mostly, I&amp;rsquo;ve learned to be more forgiving of myself for the constant tool-switching. It used to make me feel like I was flaky and undisciplined, like I couldn&amp;rsquo;t commit to anything. But I&amp;rsquo;ve realized that the experimentation itself is valuable. Each tool teaches me something about how my brain works, what kinds of interfaces and workflows feel natural, what features I actually need versus what I think I want.&lt;/p&gt;&#10;&lt;p&gt;The ADHD brain learns by doing, not by planning. We can&amp;rsquo;t just think our way to the perfect productivity system—we have to try things and see what works. And what works changes over time as our responsibilities shift, as our understanding of our own needs evolves, as the tools themselves improve.&lt;/p&gt;&#10;&lt;p&gt;So yeah, I&amp;rsquo;m probably going to keep trying new tools. I&amp;rsquo;m probably going to get excited about the next note-taking app that promises to revolutionize how I organize my thoughts. I&amp;rsquo;m probably going to spend a weekend setting up some elaborate system that I&amp;rsquo;ll abandon in a month.&lt;/p&gt;&#10;&lt;p&gt;But now I know that&amp;rsquo;s okay. The tool-switching isn&amp;rsquo;t a character flaw—it&amp;rsquo;s just how my brain explores the space of possibilities. The dopamine hits aren&amp;rsquo;t shallow and meaningless—they&amp;rsquo;re fuel for the experimentation that eventually leads to insights and improvements.&lt;/p&gt;&#10;&lt;p&gt;And sometimes, just sometimes, I discover something that genuinely makes my life better. Not permanently, not perfectly, but meaningfully. A workflow that reduces friction, an interface that matches my mental model, a feature that solves a problem I&amp;rsquo;ve been struggling with for years.&lt;/p&gt;&#10;&lt;p&gt;Those discoveries are worth all the false starts and abandoned setups. They&amp;rsquo;re worth the eye-rolls from friends who&amp;rsquo;ve watched me get excited about productivity systems dozens of times. They&amp;rsquo;re worth the nagging voice in my head that says I should just pick something and stick with it.&lt;/p&gt;&#10;&lt;p&gt;Because the alternative—giving up on the search for better ways of working—means accepting limitations that might not actually be permanent. And the ADHD brain, for all its inconsistencies and contradictions, is fundamentally optimistic about the possibility of improvement.&lt;/p&gt;&#10;&lt;p&gt;We keep trying because we believe things can get better. We keep experimenting because we&amp;rsquo;re not satisfied with &amp;ldquo;good enough.&amp;rdquo; We keep switching tools because we&amp;rsquo;re still learning how we work best.&lt;/p&gt;&#10;&lt;p&gt;And you know what? Sometimes that relentless optimism pays off. Sometimes the next tool really is better than the last one. Sometimes the experimentation leads to genuine insights. Sometimes another day, another tool, another dopamine hit is exactly what we need to keep moving forward.&lt;/p&gt;&#10;&lt;p&gt;Even if we&amp;rsquo;ll probably be trying something new again next month.&lt;/p&gt;&#10;</description></item><item><title>Unfiltered thoughts from an ADHD Engineer</title><link>https://blog.samplayskeys.com/p/unfiltered-thoughts-from-an-adhd-engineer/</link><pubDate>Sun, 09 Mar 2025 00:00:00 +0000</pubDate><guid>https://blog.samplayskeys.com/p/unfiltered-thoughts-from-an-adhd-engineer/</guid><description>&lt;img src="https://blog.samplayskeys.com/p/unfiltered-thoughts-from-an-adhd-engineer/cover.jpg" alt="Featured image of post Unfiltered thoughts from an ADHD Engineer" /&gt;&lt;h2 id="the-silent-struggle-of-adhd"&gt;The Silent Struggle of ADHD&#10;&lt;/h2&gt;&lt;p&gt;So here&amp;rsquo;s the thing about having ADHD in tech: nobody talks about it. Not really. We&amp;rsquo;ll talk about imposter syndrome and burnout and work-life balance, but we won&amp;rsquo;t talk about what it&amp;rsquo;s like to have a brain that works differently in an industry that expects you to think in straight lines.&lt;/p&gt;&#10;&lt;p&gt;As someone who&amp;rsquo;s been aware of their ADHD diagnosis for the last 20+ years, this is nothing new. And yet despite all of that time, and the many years spent trying to better understand how my brain works, I still only somewhat have a grasp on what is going on inside my mind. We don&amp;rsquo;t fully understand ADHD (nor the treatment options) from a scientific perspective, so how can I be expected to understand it as a regular person?&lt;/p&gt;&#10;&lt;p&gt;And now I&amp;rsquo;m trying to figure out how to talk about it professionally without sounding like I&amp;rsquo;m making excuses or asking for special treatment. Because the truth is, ADHD is both my biggest professional asset and my biggest professional liability, sometimes within the same hour.&lt;/p&gt;&#10;&lt;h2 id="its-not-a-deficit-its-dopamine-disregulation"&gt;It&amp;rsquo;s Not a Deficit: It&amp;rsquo;s Dopamine Disregulation&#10;&lt;/h2&gt;&lt;p&gt;But here&amp;rsquo;s what I wish more people understood: ADHD isn&amp;rsquo;t really a deficit disorder, despite what the name suggests. It&amp;rsquo;s fundamentally about dopamine regulation—or more accurately, the inability to regulate dopamine distribution in your brain.&lt;/p&gt;&#10;&lt;p&gt;Dopamine is your brain&amp;rsquo;s reward and motivation system. It&amp;rsquo;s what makes tasks feel rewarding, what helps you maintain attention on things that aren&amp;rsquo;t immediately interesting, what drives executive function. In neurotypical brains, dopamine gets released in predictable ways that help maintain steady attention and motivation.&lt;/p&gt;&#10;&lt;p&gt;In ADHD brains? It&amp;rsquo;s chaos. We don&amp;rsquo;t produce dopamine consistently, and we don&amp;rsquo;t distribute it where it needs to go when it needs to be there. This explains so much about why we function the way we do.&lt;/p&gt;&#10;&lt;h3 id="the-dopamine-feast-or-famine"&gt;The Dopamine Feast or Famine&#10;&lt;/h3&gt;&lt;p&gt;Sometimes we get massive dopamine floods from interesting, novel, or challenging tasks, which is what creates hyperfocus. Your brain finally gets the chemical reward it&amp;rsquo;s been craving, so it latches onto that activity with laser intensity. This is why I can spend fourteen hours straight debugging a fascinating race condition but can&amp;rsquo;t force myself to spend twenty minutes updating documentation.&lt;/p&gt;&#10;&lt;p&gt;Other times, we&amp;rsquo;re running on dopamine fumes. Boring but necessary tasks don&amp;rsquo;t trigger any reward response, so our brains literally can&amp;rsquo;t engage. It&amp;rsquo;s not laziness or lack of discipline: it&amp;rsquo;s neurochemistry. The executive function circuits that control planning, working memory, and task switching all depend on adequate dopamine, and when it&amp;rsquo;s not there, they just&amp;hellip; don&amp;rsquo;t work.&lt;/p&gt;&#10;&lt;p&gt;This feast-or-famine cycle also explains why ADHD brains are at higher risk for addiction. We&amp;rsquo;re constantly seeking that dopamine hit, whether it&amp;rsquo;s from stimulating work, caffeine, social media, video games, or unfortunately sometimes more dangerous substances. Our brains are literally wired to chase rewards because we&amp;rsquo;re not getting consistent baseline dopamine like neurotypical people do.&lt;/p&gt;&#10;&lt;h2 id="the-superpowers-yes-really"&gt;The Superpowers (Yes, Really)&#10;&lt;/h2&gt;&lt;p&gt;Let me start with the good stuff, because there is good stuff, even though most of the literature focuses on deficits and disorders. The ADHD brain is really, really good at pattern recognition. I can look at a codebase and immediately spot the places where abstractions are breaking down, where complexity is accumulating, where the architecture is starting to buckle under its own weight.&lt;/p&gt;&#10;&lt;p&gt;I can context-switch between projects faster than most people can remember what they were working on. I can hold multiple complex mental models in my head simultaneously. I can see connections between seemingly unrelated problems and come up with solutions that nobody else was considering.&lt;/p&gt;&#10;&lt;p&gt;When I&amp;rsquo;m in hyperfocus mode (which is basically the ADHD equivalent of flow state, except more intense and less controllable) I can solve problems that have been stumping teams for weeks. I&amp;rsquo;ll disappear into code for eight hours straight and emerge with some elegant solution that addresses not just the immediate problem but three other issues that nobody even realized were related.&lt;/p&gt;&#10;&lt;p&gt;These are genuine strengths. They&amp;rsquo;re not consolation prizes or silver linings. They&amp;rsquo;re legitimate advantages that have made me better at my job in measurable ways.&lt;/p&gt;&#10;&lt;h2 id="the-hidden-costs"&gt;The Hidden Costs&#10;&lt;/h2&gt;&lt;p&gt;But here&amp;rsquo;s the thing: they come with costs that are really hard to explain to people whose brains work more predictably.&lt;/p&gt;&#10;&lt;h3 id="when-hyperfocus-goes-wrong"&gt;When Hyperfocus Goes Wrong&#10;&lt;/h3&gt;&lt;p&gt;Let me talk about hyperfocus for a moment, because everyone seems to think it&amp;rsquo;s a superpower without understanding the downsides. Yes, hyperfocus can be incredibly productive. But it&amp;rsquo;s also completely involuntary and often inappropriate.&lt;/p&gt;&#10;&lt;p&gt;Hyperfocus happens when something finally triggers enough dopamine to flood your attention circuits. The problem is, you can&amp;rsquo;t control what triggers it or when it stops. I can hyperfocus on optimizing a function that saves three milliseconds while completely ignoring the critical bug that&amp;rsquo;s affecting thousands of users. I can spend six hours researching the perfect keyboard instead of working on the deadline that&amp;rsquo;s tomorrow.&lt;/p&gt;&#10;&lt;p&gt;And when you&amp;rsquo;re in hyperfocus, everything else ceases to exist. I&amp;rsquo;ll forget to eat, forget to go to the bathroom, forget that I have a family. I&amp;rsquo;ve missed meetings, ignored urgent messages, and worked through severe dehydration because my brain was locked onto something and wouldn&amp;rsquo;t let go. This isn&amp;rsquo;t my experience only; this is a pattern that most people will ADHD will recognize immediately. &amp;ldquo;Have you had food/water today&amp;rdquo; is a question that is honestly not asked of me enough.&lt;/p&gt;&#10;&lt;h3 id="executive-function-when-the-ceo-of-your-brain-goes-missing"&gt;Executive Function: When the CEO of Your Brain Goes Missing&#10;&lt;/h3&gt;&lt;p&gt;Then there&amp;rsquo;s executive functioning (or in this case, &lt;em&gt;disfunctioning&lt;/em&gt;): basically the CEO of your brain. This is the element of your mind that is supposed to prioritize tasks, manage working memory, control impulses, and coordinate between different brain regions. In ADHD brains, that CEO is either completely absent or drunk on the job.&lt;/p&gt;&#10;&lt;p&gt;This is why I can architect systems that handle millions of users but need seventeen different productivity apps to remember basic tasks. The part of my brain that can solve complex technical problems is completely separate from the part that&amp;rsquo;s supposed to manage day-to-day executive tasks. And when dopamine isn&amp;rsquo;t flowing to the executive function circuits, that CEO just&amp;hellip; doesn&amp;rsquo;t show up to work.&lt;/p&gt;&#10;&lt;p&gt;It&amp;rsquo;s not that I don&amp;rsquo;t care about responding to emails or submitting timesheets. It&amp;rsquo;s that the neurochemical infrastructure required to prioritize and remember those tasks literally isn&amp;rsquo;t functioning properly.&lt;/p&gt;&#10;&lt;h3 id="the-dopamine-seeking-trap"&gt;The Dopamine-Seeking Trap&#10;&lt;/h3&gt;&lt;p&gt;Here&amp;rsquo;s something nobody talks about: ADHD brains are basically addiction machines. Not because we have addictive personalities, but because we&amp;rsquo;re constantly seeking the dopamine hits that neurotypical brains get naturally.&lt;/p&gt;&#10;&lt;p&gt;This shows up in tech work in ways that can look productive on the surface. The endless scroll through Hacker News or Reddit &amp;ldquo;for research.&amp;rdquo; The compulsive checking of notifications, email, Slack. The inability to step away from a problem even when you&amp;rsquo;re exhausted because your brain finally found something that&amp;rsquo;s giving it the chemical reward it craves.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;ve seen ADHD engineers burn out not because they were working too hard, but because they couldn&amp;rsquo;t stop working once they found something stimulating. They&amp;rsquo;d code for eighteen hours straight, forget to eat, ignore their families, and crash completely when the dopamine finally ran out.&lt;/p&gt;&#10;&lt;p&gt;The addiction risk is real and higher than most people realize. Stimulants (including caffeine), alcohol, gaming, social media, even workaholism: they&amp;rsquo;re all ways our brains try to self-medicate the dopamine disregulation. The line between &amp;ldquo;passionate about technology&amp;rdquo; and &amp;ldquo;addicted to the dopamine hit of solving problems&amp;rdquo; can be frighteningly thin.&lt;/p&gt;&#10;&lt;h3 id="the-invisible-struggle"&gt;The Invisible Struggle&#10;&lt;/h3&gt;&lt;p&gt;And the worst part is that these struggles are invisible. When someone sees me solve a complex technical problem quickly, they assume I&amp;rsquo;m just naturally organized and productive. They don&amp;rsquo;t see the internal chaos, the constant background noise of half-formed thoughts and mental tangents, the exhaustion that comes from fighting your own brain all day just to appear normal.&lt;/p&gt;&#10;&lt;p&gt;They don&amp;rsquo;t see the imposter syndrome that kicks in when hyperfocus wears off and suddenly I can&amp;rsquo;t remember how I solved that problem or whether I actually understand it as well as I thought I did.&lt;/p&gt;&#10;&lt;p&gt;They definitely don&amp;rsquo;t see the shame spiral that happens when I miss deadlines not because the work is hard, but because I couldn&amp;rsquo;t make myself do the boring parts. Or when I have to ask someone to repeat instructions for the third time because my mind wandered during the explanation.&lt;/p&gt;&#10;&lt;h2 id="the-diversity-we-dont-talk-about"&gt;The Diversity We Don&amp;rsquo;t Talk About&#10;&lt;/h2&gt;&lt;p&gt;The tech industry loves to talk about diversity and inclusion, but we mostly mean visible diversity. We&amp;rsquo;re getting better at recognizing that teams work better when they include different backgrounds and perspectives and experiences. We&amp;rsquo;re slowly learning to accommodate different working styles and communication preferences.&lt;/p&gt;&#10;&lt;p&gt;But we&amp;rsquo;re still not great at accommodating different cognitive styles. We still design processes and practices around neurotypical assumptions about attention and motivation and memory.&lt;/p&gt;&#10;&lt;h3 id="when-agile-isnt-so-agile"&gt;When Agile Isn&amp;rsquo;t So Agile&#10;&lt;/h3&gt;&lt;p&gt;Take agile ceremonies, for example. Daily standups are supposed to be quick check-ins, but they often turn into rambling status updates that go on for thirty minutes. For someone with ADHD, that&amp;rsquo;s torture. My attention starts wandering after about five minutes, and by the end I can&amp;rsquo;t remember what anyone said, including what I said about my own work.&lt;/p&gt;&#10;&lt;p&gt;Retros are supposed to be collaborative reflection sessions, but they&amp;rsquo;re often dominated by whoever talks the loudest or thinks the fastest. The ADHD brain has great insights, but they often come in bursts, or tangents, or connections that seem random until you explain the underlying logic. By the time I&amp;rsquo;ve figured out how to articulate a thought, the conversation has moved on.&lt;/p&gt;&#10;&lt;p&gt;Project planning sessions assume that you can estimate how long tasks will take based on their apparent complexity. But ADHD brains don&amp;rsquo;t work that way. Sometimes the &amp;ldquo;easy&amp;rdquo; task takes forever because it&amp;rsquo;s boring and my brain won&amp;rsquo;t engage with it. Sometimes the &amp;ldquo;hard&amp;rdquo; task gets done in two hours because it triggered hyperfocus.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;ve learned to work around most of these issues—I take detailed notes during meetings, I break large tasks into smaller pieces, I use timers and reminders and accountability systems. But it&amp;rsquo;s exhausting to constantly translate between how my brain works and how the workplace expects it to work.&lt;/p&gt;&#10;&lt;h2 id="the-performance-of-normal"&gt;The Performance of Normal&#10;&lt;/h2&gt;&lt;p&gt;I&amp;rsquo;m one of the lucky ones. I&amp;rsquo;m in a field where being weird and obsessive about details is often seen as a positive trait. I work for companies that value results over process, where being able to solve hard problems quickly matters more than being able to sit still during long meetings.&lt;/p&gt;&#10;&lt;p&gt;But I still feel like I&amp;rsquo;m performing &amp;ldquo;normal&amp;rdquo; most of the time. Still worrying that if people knew how much effort it takes me to do things that seem effortless for others, they&amp;rsquo;d question whether I actually belong here.&lt;/p&gt;&#10;&lt;p&gt;The truth is, I don&amp;rsquo;t know if I&amp;rsquo;m a good engineer despite having ADHD or because of it. Probably both. The pattern recognition and systems thinking and ability to see connections—those come from the same brain that can&amp;rsquo;t remember where I put my keys or what I had for lunch.&lt;/p&gt;&#10;&lt;h2 id="were-not-alone"&gt;We&amp;rsquo;re Not Alone&#10;&lt;/h2&gt;&lt;p&gt;What I do know is that there are a lot of us out there, more than most people realize. Engineers and designers and product managers and CTOs who are quietly struggling with executive function and working memory and attention regulation while trying to build the future.&lt;/p&gt;&#10;&lt;p&gt;And maybe we&amp;rsquo;d all benefit from talking about it more. From acknowledging that diversity includes cognitive diversity, that different brains solve problems differently, that the weird kid who can&amp;rsquo;t sit still during meetings might be the same person who sees the solution that nobody else was looking for.&lt;/p&gt;&#10;&lt;h2 id="worth-celebrating"&gt;Worth Celebrating&#10;&lt;/h2&gt;&lt;p&gt;Ultimately, the best technology comes from people who think differently. Who see patterns others miss, who ask questions others don&amp;rsquo;t think to ask, who approach problems from angles that seem random until they reveal insights that change everything.&lt;/p&gt;&#10;&lt;p&gt;That&amp;rsquo;s worth protecting. That&amp;rsquo;s worth accommodating. That&amp;rsquo;s worth celebrating.&lt;/p&gt;&#10;&lt;p&gt;Even if it means figuring out how to make meetings shorter.&lt;/p&gt;&#10;</description></item><item><title>The wish to be Wild-Built</title><link>https://blog.samplayskeys.com/p/the-wish-to-be-wild-built/</link><pubDate>Tue, 11 Feb 2025 00:00:00 +0000</pubDate><guid>https://blog.samplayskeys.com/p/the-wish-to-be-wild-built/</guid><description>&lt;h3 id="the-surreal-intersection-of-humanity-and-machinery-in"&gt;&lt;strong&gt;The Surreal Intersection of Humanity and Machinery in &amp;ldquo;A Psalm for the Wild-Built&amp;rdquo;&lt;/strong&gt;&#10;&lt;/h3&gt;&lt;p&gt;When I picked up &amp;ldquo;A Psalm for the Wild-Built&amp;rdquo; by Becky Chambers, I was prepared for a journey through an imaginative landscape, but I was not fully prepared for the emotional resonance of its core message: &amp;ldquo;it was a land built for machines, not men.&amp;rdquo; This phrase echoes hauntingly throughout the narrative, inviting readers to reflect on the relationship between humanity and the artificial constructs we create.&lt;/p&gt;&#10;&lt;h3 id="a-world-shaped-by-technology"&gt;&lt;strong&gt;A World Shaped by Technology&lt;/strong&gt;&#10;&lt;/h3&gt;&lt;p&gt;Chambers crafts a world where technology has taken center stage, shaping the environment in ways that often feel alien to the human experience. The roads are paved, the buildings are towering, and the infrastructure is meticulously designed to serve the needs of machines rather than the comfort of people. This stark contrast between the practicalities of modern design and the emotional, spiritual needs of individuals creates a surreal sense of disconnection.&lt;/p&gt;&#10;&lt;p&gt;As I read through descriptions of this landscape, I couldn&amp;rsquo;t help but think of our own world. Urban areas are filled with concrete and steel, designed for efficiency and productivity. In many cases, the human element is an afterthought, leading to environments that can feel sterile and isolating. Chambers highlights this paradox beautifully; her world is one where humanity has stepped back, allowing machines to dominate.&lt;/p&gt;&#10;&lt;h3 id="the-quest-for-meaning"&gt;&lt;strong&gt;The Quest for Meaning&lt;/strong&gt;&#10;&lt;/h3&gt;&lt;p&gt;In &amp;ldquo;A Psalm for the Wild-Built,&amp;rdquo; we follow the journey of a tea monk named Dex, who seeks to explore the world and understand its deeper meanings beyond the confines of machinery. The phrase &amp;ldquo;built for machines, not men&amp;rdquo; serves as a catalyst for Dex&amp;rsquo;s journey, pushing him to confront the very essence of what it means to be human in a world increasingly dictated by technology.&lt;/p&gt;&#10;&lt;p&gt;Dex&amp;rsquo;s journey is profoundly personal. He grapples with questions of purpose, belonging, and the nature of work in a society that has prioritized efficiency over human connection. The surreal quality of this exploration lies in its universality; we all seek meaning in our lives, yet we often find ourselves trapped in systems that prioritize productivity over fulfillment.&lt;/p&gt;&#10;&lt;h3 id="human-connection-in-the-age-of-machines"&gt;&lt;strong&gt;Human Connection in the Age of Machines&lt;/strong&gt;&#10;&lt;/h3&gt;&lt;p&gt;One of the most striking elements of Chambers&amp;rsquo; writing is her ability to weave themes of connection and disconnection throughout the narrative. As Dex travels, he encounters various characters who have also felt the weight of a world designed for machines. Their stories are poignant reminders of the importance of human connection in an age dominated by technology.&lt;/p&gt;&#10;&lt;p&gt;The relationships that develop between Dex and the other characters highlight the innate desire for community and understanding. In a land built for machines, their interactions become a refuge, illustrating that even in a surreal world, the human spirit can find solace in connection. Chambers beautifully captures the delicate balance between embracing technology and nurturing our humanity.&lt;/p&gt;&#10;&lt;h3 id="nature-as-a-counterpoint"&gt;&lt;strong&gt;Nature as a Counterpoint&lt;/strong&gt;&#10;&lt;/h3&gt;&lt;p&gt;Another layer of surrealism in &amp;ldquo;A Psalm for the Wild-Built&amp;rdquo; is the contrast between the mechanical and the natural world. Chambers uses nature as a counterpoint to the sterile environments of modernity. The serene beauty of the natural landscape serves as a reminder of the world that exists beyond the reach of machines.&lt;/p&gt;&#10;&lt;p&gt;Dex&amp;rsquo;s encounters with nature are transformative. In these moments, he begins to rediscover the simple joys of life—watching the leaves rustle in the wind, feeling the warmth of the sun on his skin. These experiences remind him—and us—that true fulfillment comes not from productivity, but from living in harmony with the world around us.&lt;/p&gt;&#10;&lt;h3 id="a-reflection-of-our-reality"&gt;&lt;strong&gt;A Reflection of Our Reality&lt;/strong&gt;&#10;&lt;/h3&gt;&lt;p&gt;As I finished reading &amp;ldquo;A Psalm for the Wild-Built,&amp;rdquo; I found myself reflecting on my own life and the world we inhabit. The sentiment that we live in a land built for machines resonates deeply, particularly in an era marked by rapid technological advancement. We are often so consumed by our devices and schedules that we neglect the very essence of what it means to be human.&lt;/p&gt;&#10;&lt;p&gt;Chambers&amp;rsquo; narrative encourages us to pause and evaluate our relationship with technology. Are we allowing it to dictate our lives, or are we embracing it as a tool to enhance our humanity? The surreal quality of her story serves as a reminder that we have the power to shape our environments—both physical and emotional—to nurture connection, creativity, and compassion.&lt;/p&gt;&#10;&lt;h3 id="conclusion"&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&#10;&lt;/h3&gt;&lt;p&gt;In conclusion, &amp;ldquo;A Psalm for the Wild-Built&amp;rdquo; invites readers to engage in a contemplative exploration of the intersection between humanity and machinery. The phrase &amp;ldquo;it was a land built for machines, not men&amp;rdquo; resonates as a call to action, urging us to reclaim our connection to each other and the natural world.&lt;/p&gt;&#10;&lt;p&gt;As we navigate our own landscapes—both urban and personal—let us remember the importance of building spaces that foster human connection and emotional fulfillment. Chambers&amp;rsquo; work serves as a poignant reminder that while machines may shape our environments, it is the human spirit that ultimately defines our experience. In a world increasingly dominated by technology, let us strive to create a balance between the mechanical and the meaningful, ensuring that our lives are built for people, not just machines.&lt;/p&gt;&#10;</description></item><item><title>What it takes to get hired</title><link>https://blog.samplayskeys.com/p/what-it-takes-to-get-hired/</link><pubDate>Sun, 19 Jan 2025 00:00:00 +0000</pubDate><guid>https://blog.samplayskeys.com/p/what-it-takes-to-get-hired/</guid><description>&lt;p&gt;I&amp;rsquo;ve been on both sides of the hiring table enough times now to have some opinions about this whole process, and honestly, most of them are pretty depressing. The way we hire engineers is fundamentally broken, but it&amp;rsquo;s broken in predictable ways that you can game if you understand the system.&lt;/p&gt;&#10;&lt;p&gt;Which is itself part of the problem.&lt;/p&gt;&#10;&lt;p&gt;Let me start with the obvious stuff that everyone knows but nobody wants to admit: technical interviews don&amp;rsquo;t really test your ability to do the job. They test your ability to solve algorithmic puzzles on a whiteboard under pressure while someone watches you and judges your every move.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;ve hired people who aced the leetcode-style questions but couldn&amp;rsquo;t debug a production issue to save their lives. I&amp;rsquo;ve also passed on people who struggled with the toy problems but had the kind of deep systems knowledge that comes from years of actually building and maintaining real software.&lt;/p&gt;&#10;&lt;p&gt;The disconnect is obvious once you think about it. When was the last time you had to implement a binary search tree at work? When was the last time you had to reverse a linked list? When was the last time you solved any problem without access to Google, Stack Overflow, and the ability to run your code to see if it works?&lt;/p&gt;&#10;&lt;p&gt;But we keep doing these interviews because they&amp;rsquo;re easy to standardize, easy to score, and they feel objective. They give hiring managers the illusion that they&amp;rsquo;re making rational, data-driven decisions rather than subjective judgments about whether they like a person or not.&lt;/p&gt;&#10;&lt;p&gt;The reality is much messier.&lt;/p&gt;&#10;&lt;p&gt;What actually matters for doing engineering work well? Let me think about the best engineers I&amp;rsquo;ve worked with and what made them effective:&lt;/p&gt;&#10;&lt;p&gt;They could break down complex problems into manageable pieces. They could debug issues systematically rather than randomly trying different things until something worked. They could read and understand existing code quickly. They could communicate technical concepts clearly to both technical and non-technical audiences. They could collaborate effectively with teammates who had different working styles and communication preferences.&lt;/p&gt;&#10;&lt;p&gt;They had good instincts about when to optimize and when to ship. They understood the business context around their technical decisions. They could balance perfectionism with pragmatism. They could learn new technologies quickly without getting overwhelmed by choice.&lt;/p&gt;&#10;&lt;p&gt;Most importantly, they gave a shit. They cared about the quality of their work, about the experience of people using their software, about the maintainability of the systems they built.&lt;/p&gt;&#10;&lt;p&gt;None of these qualities are tested by traditional technical interviews. Some of them can&amp;rsquo;t be tested in an interview at all—they only emerge over time, through actually working with someone.&lt;/p&gt;&#10;&lt;p&gt;So what does get you hired? Unfortunately, it&amp;rsquo;s mostly signal rather than substance.&lt;/p&gt;&#10;&lt;p&gt;You need to be able to perform competence rather than just demonstrate it. You need to tell a compelling story about your background and your interests. You need to ask thoughtful questions that show you&amp;rsquo;ve researched the company and understand their challenges. You need to seem enthusiastic about their specific problems rather than just looking for any job.&lt;/p&gt;&#10;&lt;p&gt;You need to practice the artificial interview questions until you can solve them smoothly and confidently, even though they have nothing to do with the work you&amp;rsquo;ll actually be doing. You need to be able to explain your thought process clearly while solving these problems, which is a completely different skill from actually solving them.&lt;/p&gt;&#10;&lt;p&gt;And increasingly, you need to have the right keywords on your resume and the right projects in your GitHub. The screening process has become so automated that humans often never see candidates who don&amp;rsquo;t match the exact technology stack the company thinks they need.&lt;/p&gt;&#10;&lt;p&gt;This is particularly challenging for people whose careers don&amp;rsquo;t fit the standard narrative. If you&amp;rsquo;re changing careers, if you took time off, if you learned to code through non-traditional paths, if your experience is broad rather than deep in trendy technologies—you&amp;rsquo;re at a disadvantage regardless of your actual capabilities.&lt;/p&gt;&#10;&lt;p&gt;The ADHD angle makes this even more complicated. Many of us are really good at the actual work but terrible at the performance aspects of interviewing. We might nail the technical questions but struggle with the behavioral questions that require constructing coherent narratives about past experiences.&lt;/p&gt;&#10;&lt;p&gt;Or we might do great in casual technical conversations but freeze up when asked to solve problems on a whiteboard with someone watching. The artificial pressure and lack of normal tools can trigger anxiety that has nothing to do with technical ability.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;ve bombed interviews for jobs I could have done in my sleep, and I&amp;rsquo;ve gotten offers for roles that were probably above my level at the time, all based on how well I performed in the interview rather than how well I could actually do the work.&lt;/p&gt;&#10;&lt;p&gt;The optimist in me wants to believe this is changing. Some companies are experimenting with take-home projects, pair programming sessions, code review demonstrations, and other formats that better simulate actual work. The rise of remote work and AI tools have made it easier for companies to hire based on demonstrated ability rather than cultural fit.&lt;/p&gt;&#10;&lt;p&gt;But the pessimist in me knows that most companies are still using the same broken process because it&amp;rsquo;s what everyone else does, and changing hiring practices is risky and expensive.&lt;/p&gt;&#10;&lt;p&gt;So what&amp;rsquo;s the practical advice for people trying to navigate this system?&lt;/p&gt;&#10;&lt;p&gt;First, accept that the game is partly artificial and prepare accordingly. Practice the leetcode problems, not because they matter, but because hiring managers think they matter. Get good at telling your story in a compelling way. Learn to project confidence even when you&amp;rsquo;re not feeling it.&lt;/p&gt;&#10;&lt;p&gt;Second, focus on companies and roles where you can demonstrate your actual abilities. Look for places that value take-home projects, open source contributions, or other evidence of real work. Seek out startups and smaller companies that might be more flexible about their requirements.&lt;/p&gt;&#10;&lt;p&gt;Third, build genuine relationships in the industry. The best opportunities often come through referrals, where someone who knows your work can vouch for your abilities rather than relying on interviews alone.&lt;/p&gt;&#10;&lt;p&gt;Fourth, don&amp;rsquo;t take rejection personally. The hiring process is noisy and often arbitrary. I know excellent engineers who got rejected by companies they would have thrived at, simply because the interview process didn&amp;rsquo;t capture their strengths.&lt;/p&gt;&#10;&lt;p&gt;Finally, (&lt;em&gt;this is by far the most important step:&lt;/em&gt;) once you&amp;rsquo;re in a position to influence hiring-whether as a senior engineer, tech lead, or manager-try to make the process better. Push for interview formats that actually test relevant skills. Advocate for candidates whose experience doesn&amp;rsquo;t fit the standard template. Question whether you&amp;rsquo;re optimizing for interview performance or job performance.&lt;/p&gt;&#10;&lt;p&gt;Because ultimately, the goal should be building great teams that can solve interesting problems effectively. And that requires people with diverse backgrounds, experiences, and ways of thinking.&lt;/p&gt;&#10;&lt;p&gt;The current hiring process doesn&amp;rsquo;t optimize for that. But maybe we can slowly make it better.&lt;/p&gt;&#10;</description></item></channel></rss>