<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xml" href="/feed.xslt.xml"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en_US"><generator uri="http://jekyllrb.com" version="3.3.1">Jekyll</generator><link href="https://wh.itesi.de/feed.xml" rel="self" type="application/atom+xml" /><link href="https://wh.itesi.de/" rel="alternate" type="text/html" hreflang="en_US" /><updated>2026-04-04T17:53:21-05:00</updated><id>https://wh.itesi.de/</id><title>Whiteside Advisory</title><subtitle>Personal perspectives on security leadership, governance, risk management, and real-world compliance challenges.
</subtitle><author><name>Jeff Whiteside</name><email>jeff@wh.itesi.de</email></author><entry><title>Exploring Practical Security, GRC, and Risk Leadership</title><link href="https://wh.itesi.de/professional/commentary/9999/01/01/whiteside-advisory-overview.html" rel="alternate" type="text/html" title="Exploring Practical Security, GRC, and Risk Leadership" /><published>9999-01-01T00:00:00-06:00</published><updated>9999-01-01T00:00:00-06:00</updated><id>https://wh.itesi.de/professional/commentary/9999/01/01/whiteside-advisory-overview</id><content type="html" xml:base="https://wh.itesi.de/professional/commentary/9999/01/01/whiteside-advisory-overview.html">&lt;p&gt;Practical observations and personal perspectives on building security and governance programs that actually work in the real world.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;about-this-project&quot;&gt;About This Project&lt;/h2&gt;

&lt;p&gt;After years of working in security leadership roles — building governance, risk, and compliance programs — I continue to explore how companies of all sizes can approach security in ways that balance both technical rigor and business realities.&lt;/p&gt;

&lt;p&gt;This site serves as a personal space where I share some of my thinking, experiences, and frameworks that I’ve found useful.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;topics-i-often-explore&quot;&gt;Topics I Often Explore&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Security Program Development&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Vendor Risk Management&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Incident Response Planning&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Secure Software Development&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Risk Metrics &amp;amp; Board Reporting&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;GRC &amp;amp; Compliance Frameworks&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;SOC 2, ISO 27001, HIPAA, GDPR, and others&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;my-approach&quot;&gt;My Approach&lt;/h2&gt;

&lt;p&gt;Security isn’t about adding endless controls — it’s about making smart, risk-aligned decisions that fit your business model.&lt;/p&gt;

&lt;p&gt;I focus on:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Pragmatic advice informed by real-world experience&lt;/li&gt;
  &lt;li&gt;Balancing security needs with operational impact&lt;/li&gt;
  &lt;li&gt;Building sustainable, adaptable security programs&lt;/li&gt;
  &lt;li&gt;Avoiding unnecessary complexity and “security theater”&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;contact&quot;&gt;Contact&lt;/h2&gt;

&lt;p&gt;I’m always open to connect with others thinking about these topics.&lt;/p&gt;

&lt;p&gt;📧 &lt;a href=&quot;mailto:jeff@wh.itesi.de&quot;&gt;jeff@wh.itesi.de&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;© Whiteside Advisory — Personal perspectives on practical security leadership.&lt;/p&gt;</content><author><name>Jeff Whiteside</name><email>jeff@wh.itesi.de</email></author><summary>Practical observations and personal perspectives on building security and governance programs that actually work in the real world.</summary></entry><entry><title>What I Learned in the First 12 Hours with OpenClaw</title><link href="https://wh.itesi.de/security/tooling/2026/04/04/openclaw-first-12-hours.html" rel="alternate" type="text/html" title="What I Learned in the First 12 Hours with OpenClaw" /><published>2026-04-04T00:00:00-05:00</published><updated>2026-04-04T00:00:00-05:00</updated><id>https://wh.itesi.de/security/tooling/2026/04/04/openclaw-first-12-hours</id><content type="html" xml:base="https://wh.itesi.de/security/tooling/2026/04/04/openclaw-first-12-hours.html">&lt;p&gt;I have a rule I give clients: start manual, feel the pain, then automate. Make vendors answer hard questions before you sign anything. Be skeptical of tools that promise to solve problems you haven’t fully understood yet.&lt;/p&gt;

&lt;p&gt;So naturally, when I decided to spin up OpenClaw — an open-source, self-hosted AI assistant platform — I ignored none of that advice. I stood it up on an old desktop I had sitting around, threw Ubuntu Server on it, pointed it at my Anthropic API key, and started the clock.&lt;/p&gt;

&lt;p&gt;Here’s what twelve hours actually looked like.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;what-i-was-after&quot;&gt;What I Was After&lt;/h2&gt;

&lt;p&gt;Curiosity, mostly. If you work in tech right now, you’ve heard about OpenClaw. It hit 100,000 GitHub stars in under two months and surpassed React’s decade-long record in 60 days. It’s in every Slack, every feed, every conversation about what autonomous AI agents actually look like in practice. I wanted to know what it was — not from a README, but from running it.&lt;/p&gt;

&lt;p&gt;I wasn’t going in with a production use case. I had no intention of handing it anything sensitive or consequential. My working rule: I wouldn’t trust OpenClaw with anything I wouldn’t trust my kindergartner with. Agentic AI systems that operate autonomously on your infrastructure are interesting precisely because the failure modes are novel — and the right time to learn those failure modes is in a lab, not when something important is at stake.&lt;/p&gt;

&lt;p&gt;So this was an experiment. A deliberate one, but an experiment.&lt;/p&gt;

&lt;p&gt;The original plan was a Mac Mini as the host — quiet, low power, purpose-built for always-on roles. That died when I actually tried to buy one. It turns out OpenClaw is partly responsible for its own supply problem: demand for high-memory Macs has gotten bad enough that M4 Pro and Mac Studio configurations are running four to six weeks out. People are buying them specifically to run local AI agents, landing on top of an already tight memory market. So I looked at the old desktop sitting unused in my office and made the obvious call: zero hardware cost, higher power draw, otherwise fine.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;before-openclaw-getting-the-host-right&quot;&gt;Before OpenClaw: Getting the Host Right&lt;/h2&gt;

&lt;p&gt;I could have installed Ubuntu Desktop, pointed a monitor at it, and called it done. I didn’t want that. I wanted a headless server I could SSH into from anywhere — something I’d never need to plug a monitor into again.&lt;/p&gt;

&lt;p&gt;Before touching anything, I shredded the drives. The machine had two WD HDDs and no idea what was on either of them — it had been sitting unused long enough that I genuinely couldn’t remember. Probably sensitive personal data. Probably nothing. Not worth finding out the hard way.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo shred -vfz /dev/sdb 2&amp;gt;&amp;amp;1 | tee /var/log/shred-sdb.log
sudo shred -vfz /dev/sdd 2&amp;gt;&amp;amp;1 | tee /var/log/shred-sdd.log
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Then: Ubuntu Server, installed to the internal SSD. I didn’t have a USB flash drive handy, so I used an external hard drive as the installation medium — flashed the ISO to it with Rufus, booted from it, installed to the internal disk. The external drive came back out once the install finished. GRUB went to the internal SSD’s MBR, which is exactly where it should be.&lt;/p&gt;

&lt;p&gt;After install, the machine wasn’t getting an IP. Turned out to be a Netplan misconfiguration — the installer had the wrong interface name. &lt;code class=&quot;highlighter-rouge&quot;&gt;ip link show&lt;/code&gt; to find the right one, update &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/netplan/00-installer-config.yaml&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo netplan apply&lt;/code&gt;, done.&lt;/p&gt;

&lt;p&gt;Then Tailscale:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Once it authenticated and I confirmed &lt;code class=&quot;highlighter-rouge&quot;&gt;ssh arthur@arthur&lt;/code&gt; over Tailscale worked, the monitor came off and stayed off. That was the moment it became real infrastructure rather than a lab experiment.&lt;/p&gt;

&lt;p&gt;The rest of the hardening was standard headless hygiene:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo ufw allow ssh &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo ufw &lt;span class=&quot;nb&quot;&gt;enable
&lt;/span&gt;sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
sudo systemctl disable systemd-networkd-wait-online.service
sudo systemctl mask systemd-networkd-wait-online.service
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Plus BIOS auto-power-on after outage, and SSH key auth with password login disabled. The machine is named Arthur. OpenClaw’s agent identity on this host is Claw. That felt right.&lt;/p&gt;

&lt;p&gt;The last hardening step before touching OpenClaw was privilege separation — a dedicated service account for the agent to run under.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;adduser claw
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;claw&lt;/code&gt; is not in the sudo group. Not in wheel. &lt;code class=&quot;highlighter-rouge&quot;&gt;groups claw&lt;/code&gt; returns exactly one thing: &lt;code class=&quot;highlighter-rouge&quot;&gt;claw&lt;/code&gt;. To make sure that held even if something went sideways, I added two more layers. First, edited &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/pam.d/su&lt;/code&gt; to restrict &lt;code class=&quot;highlighter-rouge&quot;&gt;su&lt;/code&gt; to wheel members only — so &lt;code class=&quot;highlighter-rouge&quot;&gt;claw&lt;/code&gt; can’t escalate to &lt;code class=&quot;highlighter-rouge&quot;&gt;arthur&lt;/code&gt; even with a valid password. Second, an explicit sudoers denial:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# /etc/sudoers.d/claw
claw ALL=(ALL) !ALL
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Belt and suspenders. The PAM restriction covers &lt;code class=&quot;highlighter-rouge&quot;&gt;su&lt;/code&gt;. The sudoers entry covers &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo&lt;/code&gt;. Together they mean a full compromise of the OpenClaw process stays contained to the &lt;code class=&quot;highlighter-rouge&quot;&gt;claw&lt;/code&gt; account — it has nowhere to go.&lt;/p&gt;

&lt;p&gt;SSH access to &lt;code class=&quot;highlighter-rouge&quot;&gt;claw&lt;/code&gt; uses the same key as &lt;code class=&quot;highlighter-rouge&quot;&gt;arthur&lt;/code&gt;, copied over during setup. That keeps the workflow clean: SSH directly as &lt;code class=&quot;highlighter-rouge&quot;&gt;claw&lt;/code&gt; from my laptop when I need to work in that context, no lateral movement required.&lt;/p&gt;

&lt;p&gt;With that in place, OpenClaw installation itself was anticlimactic.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;hour-one-openclaw&quot;&gt;Hour One: OpenClaw&lt;/h2&gt;

&lt;p&gt;Telegram integration: under ten minutes. BotFather, token, paste into the OpenClaw config, restart the gateway. First pairing request came in almost immediately — approved via one-time code from the CLI. The bot was polling within seconds.&lt;/p&gt;

&lt;p&gt;The initial agent bootstrap is a little odd if you’re not expecting it. There’s no onboarding wizard. There’s a &lt;code class=&quot;highlighter-rouge&quot;&gt;BOOTSTRAP.md&lt;/code&gt; Claw reads to orient itself, and then you’re talking to something that’s actively figuring out what it is and what you need. Less polished than a commercial product. More interesting.&lt;/p&gt;

&lt;p&gt;Setup was uneventful. The more interesting things came later.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;the-first-real-failure-silent-api-limits&quot;&gt;The First Real Failure: Silent API Limits&lt;/h2&gt;

&lt;p&gt;Around hour four, Claw went dark.&lt;/p&gt;

&lt;p&gt;Telegram messages piled up unanswered. The gateway’s systemd service was healthy. The process was alive. No errors surfaced anywhere obvious. I had to get back to a terminal and dig into &lt;code class=&quot;highlighter-rouge&quot;&gt;journalctl&lt;/code&gt; before the picture became clear: Anthropic API billing limit hit, 402 errors on every LLM call, the gateway dutifully swallowing failures and returning nothing.&lt;/p&gt;

&lt;p&gt;This is the failure mode people don’t think about when they self-host on consumption-based APIs. It’s not noisy. The infrastructure stays up. Messages arrive. The bot accepts them. And then nothing happens, because the intelligence layer is dark and nothing in the stack is designed to tell you that.&lt;/p&gt;

&lt;p&gt;Twelve hours in, I’d already burned through $12 in API usage. That’s not a complaint — the heartbeat monitoring runs constantly, and I was iterating heavily on configuration. But it’s the kind of number that clarifies things quickly. If you’re running this for anything time-sensitive — threat monitoring, alerting, anything where a missed message costs you — you need external alerting on your API spend. Anthropic’s billing soft limits exist for exactly this reason. The system won’t tell you it’s broken. You have to instrument it yourself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The lesson:&lt;/strong&gt; self-hosted doesn’t mean self-healing. Monitor your API spend or you’ll find out about limits the hard way.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;the-ufw-ordering-bug&quot;&gt;The UFW Ordering Bug&lt;/h2&gt;

&lt;p&gt;Later in the day I was hardening network isolation for this host on my VLAN. The goal: allow outbound to the gateway and internet services, deny outbound to everything else on the subnet.&lt;/p&gt;

&lt;p&gt;The ruleset looked reasonable. Default deny incoming and outgoing. DENY rule for the subnet. Port-specific ALLOWs for 53, 80, 443, 123.&lt;/p&gt;

&lt;p&gt;I tested with &lt;code class=&quot;highlighter-rouge&quot;&gt;nc -v 192.168.68.106 80&lt;/code&gt;. Connection succeeded.&lt;/p&gt;

&lt;p&gt;The problem was evaluation order. UFW processes rules top to bottom, first match wins. My port-specific ALLOWs had been inserted before the subnet DENY. Port 80 to any destination matched the ALLOW rule before the packet ever reached the DENY. The ruleset &lt;em&gt;looked&lt;/em&gt; correct — it had all the right rules — but the logic was wrong because the order was wrong.&lt;/p&gt;

&lt;p&gt;Fix: delete the out-of-order rules, reinsert the subnet DENY before the port-specific rules, retest. Blocked as expected.&lt;/p&gt;

&lt;p&gt;This is a known trap with UFW and iptables, and I’ve seen it bite people who know better, including me. The reading-the-ruleset problem is real: a firewall policy that looks right at a glance and is wrong in practice is worse than a policy that obviously needs work, because you’ll trust the one and fix the other.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The lesson:&lt;/strong&gt; verify firewall rules by testing, not reading. Order matters, and the only way to know the order is right is to check what actually happens.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;what-actually-worked-news-monitoring&quot;&gt;What Actually Worked: News Monitoring&lt;/h2&gt;

&lt;p&gt;The most immediately useful thing was something I almost treated as an afterthought.&lt;/p&gt;

&lt;p&gt;I set up a &lt;code class=&quot;highlighter-rouge&quot;&gt;HEARTBEAT.md&lt;/code&gt; — a plain-text file specifying what Claw should monitor and how often. Topics: major CVEs, GRC framework changes, AI/LLM developments, GRC SaaS market moves, content-as-code tooling. Every 30 minutes, it runs. What qualifies as worth surfacing versus routine noise is specified in the file, manually, in plain language.&lt;/p&gt;

&lt;p&gt;Within a few hours it had flagged:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Cisco IMC CVE-2026-20093&lt;/strong&gt;: unauthenticated remote admin bypass — the kind of thing you want to know about immediately if Cisco IMC is anywhere in your stack&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Proofpoint’s warning&lt;/strong&gt; that autonomous AI copilots are projected to surpass humans as the primary source of enterprise data leakage&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;RSAC 2026&lt;/strong&gt;: LLM/GenAI protection is now the #1 stated priority in enterprise security, per conference floor coverage&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;FBI wiretap system breach&lt;/strong&gt; via a third-party vendor — a clean supply chain risk case study&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s a solid morning briefing assembled automatically, filtered to my actual interests, without standing up an RSS infrastructure or paying for a threat intel subscription.&lt;/p&gt;

&lt;p&gt;The key design choice: the filtering logic lives in a plain text file I control. The agent follows it literally. If I want to tune the signal threshold, I edit the file. No dashboards, no vendor portals, no opaque “AI-powered insights.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The lesson:&lt;/strong&gt; agentic news monitoring is useful if you’re specific about your interests and explicit about your noise threshold. Vague instructions produce vague results.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;what-openclaw-actually-is&quot;&gt;What OpenClaw Actually Is&lt;/h2&gt;

&lt;p&gt;It’s a harness. A runtime that keeps an AI assistant alive, persistent, and connected to surfaces you actually use — Telegram, Discord, web chat. It doesn’t make the underlying model smarter. It doesn’t solve hallucination. It doesn’t protect you from billing surprises or misconfigured firewall rules.&lt;/p&gt;

&lt;p&gt;What it does: it gives the model continuity (via files and memory), tooling (web search, exec, file read/write), and the ability to reach you without requiring you to open a tab.&lt;/p&gt;

&lt;p&gt;The difference between an assistant you have to visit and one that can reach you when something matters is real. The difference between an assistant that resets every conversation and one that remembers your infrastructure, your preferences, and your active projects is real.&lt;/p&gt;

&lt;p&gt;But it’s infrastructure. It fails like infrastructure. It needs monitoring, hardening, documented configuration, and realistic expectations. The discipline you’d apply to any other service running on your network applies here too.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Twelve hours in: an assistant that knows my network, monitors the topics I care about, responds on Telegram when something matters, and already caught a firewall misconfiguration I’d have missed.&lt;/p&gt;

&lt;p&gt;Ask me again in a month.&lt;/p&gt;</content><author><name>Jeff Whiteside</name><email>jeff@wh.itesi.de</email></author><category term="ai" /><category term="self-hosted" /><category term="openClaw" /><category term="grc" /><category term="infrastructure" /><category term="telegram" /><summary>I have a rule I give clients: start manual, feel the pain, then automate. Make vendors answer hard questions before you sign anything. Be skeptical of tools that promise to solve problems you haven’t fully understood yet.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://wh.itesi.deimages/fulls/openclaw-header.jpg" /></entry><entry><title>The GRC SaaS Killer</title><link href="https://wh.itesi.de/security/grc/ai/2026/03/31/the-grc-saas-killer.html" rel="alternate" type="text/html" title="The GRC SaaS Killer" /><published>2026-03-31T00:00:00-05:00</published><updated>2026-03-31T00:00:00-05:00</updated><id>https://wh.itesi.de/security/grc/ai/2026/03/31/the-grc-saas-killer</id><content type="html" xml:base="https://wh.itesi.de/security/grc/ai/2026/03/31/the-grc-saas-killer.html">&lt;p&gt;GRC platforms have been selling the same dream for twenty years. One place for your risks, your controls, your evidence, your reports. A single pane of glass for your entire security program.&lt;/p&gt;

&lt;p&gt;The dream is compelling. The reality is a data entry nightmare wrapped in a six-figure renewal.&lt;/p&gt;

&lt;p&gt;I’ve been thinking about this a lot lately — and why AI models just made the alternative the obvious choice for any team willing to build it.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;what-grc-platforms-promise&quot;&gt;What GRC Platforms Promise&lt;/h2&gt;

&lt;p&gt;To be fair, the feature list is real. Every major GRC platform ships with:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A &lt;strong&gt;risk register&lt;/strong&gt; for tracking and scoring risks&lt;/li&gt;
  &lt;li&gt;A &lt;strong&gt;control library&lt;/strong&gt; mapped to frameworks like SOC 2, ISO 27001, and NIST&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Evidence collection&lt;/strong&gt; workflows tied to audit cycles&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Ticketing and workflow automation&lt;/strong&gt; to assign and track remediation&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Reporting and dashboards&lt;/strong&gt; for leadership and auditors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On paper, that covers the full GRC lifecycle. In a demo, it looks seamless. In practice, each of these features has a catch.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;risk-registers-and-control-libraries&quot;&gt;Risk Registers and Control Libraries&lt;/h2&gt;

&lt;p&gt;The promise: a living inventory of your risks and controls, always current, always mapped.&lt;/p&gt;

&lt;p&gt;The reality: someone has to maintain it. Every risk needs a description, an owner, a score, a status. Every control needs to be linked to the right frameworks, kept current as your environment changes, and reviewed on a cadence. The platform doesn’t do that work. It gives you fields to fill in.&lt;/p&gt;

&lt;p&gt;Control libraries are worse. Vendors ship pre-built libraries mapped to common frameworks. They look comprehensive until your environment has nuances the library doesn’t accommodate — and it always does. Customizing a control library in most GRC platforms is a project, not a task.&lt;/p&gt;

&lt;p&gt;With a repo-based approach, your risk register is a structured data file. Your control library is code. Both are version-controlled. Changes are committed with context. The history is yours. When your environment evolves, you update the source — not a vendor’s data model.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;framework-mapping&quot;&gt;Framework Mapping&lt;/h2&gt;

&lt;p&gt;The promise: map your controls once, get instant coverage views across SOC 2, ISO, NIST, and whatever framework comes next.&lt;/p&gt;

&lt;p&gt;The reality: the mappings are approximations. Every vendor’s framework library reflects their interpretation of the standards, not yours. When an auditor pushes back on a control mapping, you’re arguing against a black box.&lt;/p&gt;

&lt;p&gt;New frameworks and updates lag. When NIST drops a revision or a new regulation lands, you wait for the vendor’s roadmap.&lt;/p&gt;

&lt;p&gt;With a repo, your mappings are explicit and editable. You can see exactly why a control maps to a requirement. When something changes, you change it — in a pull request, with a comment, reviewed by the team. Auditors can see the logic. So can you.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;evidence-collection-and-audit-readiness&quot;&gt;Evidence Collection and Audit Readiness&lt;/h2&gt;

&lt;p&gt;The promise: automated evidence collection tied to your controls, always audit-ready.&lt;/p&gt;

&lt;p&gt;The reality: automation covers a narrow slice. Screenshots, exports, and manual uploads cover the rest. Someone is still spending weeks before every audit hunting down evidence, reformatting it, and uploading it to the right place in the platform.&lt;/p&gt;

&lt;p&gt;Evidence also lives inside the platform. If you switch vendors or lose access, so does your audit history.&lt;/p&gt;

&lt;p&gt;With a repo, evidence collection is a script. Pull the data you need from your actual systems, store it in your own infrastructure, and version it alongside the controls it supports. MCPs — Model Context Protocols — let AI models connect directly to your data sources, ticketing systems, and documentation tools to pull and organize evidence on demand. Your audit package is generated, not assembled by hand.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;workflow-automation-and-ticketing&quot;&gt;Workflow Automation and Ticketing&lt;/h2&gt;

&lt;p&gt;The promise: assign remediation tasks, track status, and close the loop — all inside the platform.&lt;/p&gt;

&lt;p&gt;The reality: your engineers don’t live in the GRC platform. They live in Jira, Linear, GitHub, or whatever your engineering org uses. Every finding that needs remediation has to be manually translated into a ticket in the system your engineers actually check. Status updates flow in one direction — someone has to keep the GRC platform current by hand.&lt;/p&gt;

&lt;p&gt;With a repo-based approach and the right MCP connections, that translation is automatic. A finding in your risk data triggers a ticket in your engineering system, pre-populated with the right context, labels, and assignee. Status syncs back. Nothing lives only in the GRC platform because there is no GRC platform to be siloed in.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;reporting-and-dashboards&quot;&gt;Reporting and Dashboards&lt;/h2&gt;

&lt;p&gt;The promise: executive dashboards, audit reports, and board-ready summaries generated automatically.&lt;/p&gt;

&lt;p&gt;The reality: the outputs look like enterprise software from 2015. Rigid templates. Vendor branding. Limited customization. The reports that come out of GRC platforms rarely look as good as what the vendor showed you in the demo.&lt;/p&gt;

&lt;p&gt;Custom reports are a configuration project. Anything outside the vendor’s templates requires professional services or a workaround.&lt;/p&gt;

&lt;p&gt;With a repo, your reports are generated from your data. The format is yours. AI models can take raw metrics and draft the narrative — identifying the trend that matters, framing it for the right audience, producing something you’d actually want to send to your board. You edit. You don’t fight a template.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;the-repo-based-model&quot;&gt;The Repo-Based Model&lt;/h2&gt;

&lt;p&gt;Here’s what this looks like in practice.&lt;/p&gt;

&lt;p&gt;Your GRC program lives in a shared code repository. Risks, controls, framework mappings, and assessment logic are structured data and scripts — readable, editable, and version-controlled by the whole team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skills&lt;/strong&gt; are reusable task definitions — think of them as documented workflows your AI model knows how to execute. Run a vendor risk assessment. Generate the monthly metrics package. Produce an audit evidence summary. Each skill encodes the steps, the data sources, and the expected output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCPs&lt;/strong&gt; are the connections. They let your AI model reach into your actual systems — your ticketing tool, your documentation platform, your cloud environment — to pull data, create records, and update status without manual translation.&lt;/p&gt;

&lt;p&gt;Put them together and you have a GRC program that executes on demand, reasons about what it finds, and produces outputs your team can actually use.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;why-this-wins&quot;&gt;Why This Wins&lt;/h2&gt;

&lt;p&gt;GRC SaaS platforms create a ceiling. The vendor’s data model, roadmap, and pricing define what’s possible. When your needs outgrow their assumptions, you’re filing a support ticket or writing a check for professional services.&lt;/p&gt;

&lt;p&gt;A repo has no ceiling. When your needs change, you change the code. When AI models get more capable — and they will — your program gets more capable with them.&lt;/p&gt;

&lt;p&gt;Every change is a commit. Every output is reproducible. When an auditor asks how you calculated a risk score a year ago, you check out the tag and run it.&lt;/p&gt;

&lt;p&gt;Try asking your GRC SaaS vendor for that.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;The platform was never the point. The program is.&lt;/p&gt;</content><author><name>Jeff Whiteside</name><email>jeff@wh.itesi.de</email></author><category term="ai-models" /><category term="grc" /><category term="risk-management" /><category term="compliance" /><category term="automation" /><category term="tooling" /><summary>GRC platforms have been selling the same dream for twenty years. One place for your risks, your controls, your evidence, your reports. A single pane of glass for your entire security program.</summary></entry><entry><title>Word Is Losing. Not to Another Word Processor.</title><link href="https://wh.itesi.de/technology/productivity/2026/03/22/word-is-losing.html" rel="alternate" type="text/html" title="Word Is Losing. Not to Another Word Processor." /><published>2026-03-22T00:00:00-05:00</published><updated>2026-03-22T00:00:00-05:00</updated><id>https://wh.itesi.de/technology/productivity/2026/03/22/word-is-losing</id><content type="html" xml:base="https://wh.itesi.de/technology/productivity/2026/03/22/word-is-losing.html">&lt;p&gt;I’ve been writing in markdown for years. This blog runs on it. My notes live in it. Most of my structured thinking starts in a plain text file with a handful of &lt;code class=&quot;highlighter-rouge&quot;&gt;##&lt;/code&gt; headers and some dashes.&lt;/p&gt;

&lt;p&gt;For a long time I thought of that as a personal quirk — something that worked for me but probably wasn’t how most people operated. Lately I’ve changed my mind. I think the shift I’ve made in my own workflow is happening across the industry, and it’s going to keep accelerating. Microsoft Word isn’t going to disappear, but the WYSIWYG paradigm it represents — format-as-you-write, everything-in-one-file, documents-that-look-like-printed-pages — is losing ground fast.&lt;/p&gt;

&lt;p&gt;Not to a better word processor. To something structurally different.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;the-formatting-tax-is-real-and-its-expensive&quot;&gt;The Formatting Tax Is Real and It’s Expensive&lt;/h2&gt;

&lt;p&gt;If you’ve spent any time in enterprise environments, you know the formatting tax. You’ve paid it.&lt;/p&gt;

&lt;p&gt;You paste a section from one Word document into another and the font changes. A numbered list decides it wants to restart at 1 when you need it to continue from 4. The styles in the template someone sent you conflict with the styles in the document you already have, and Word “helpfully” resolves the conflict in a way that makes everything look like it was assembled by two different teams who’ve never spoken — because it was. Someone tracks changes on a document you didn’t know was in review mode and now you’re reconciling edits in a colored-comment nightmare.&lt;/p&gt;

&lt;p&gt;These aren’t edge cases. This is Tuesday.&lt;/p&gt;

&lt;p&gt;The formatting tax isn’t just annoying — it’s a real drag on the work. I’ve watched teams spend an hour on a document’s appearance for every two hours on its content. The tool is consuming effort that should go toward the thinking.&lt;/p&gt;

&lt;p&gt;Word was designed for a world where the document &lt;em&gt;was&lt;/em&gt; the output. You wrote it, you printed it, you handed it to someone. The formatting mattered because the page was the final artifact. But that’s not how most documents work anymore.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;nobody-is-printing-these-documents&quot;&gt;Nobody Is Printing These Documents&lt;/h2&gt;

&lt;p&gt;Think about the last ten “documents” you produced or consumed at work. How many of them got printed?&lt;/p&gt;

&lt;p&gt;Most professional documents today are read on screens, pasted into emails, uploaded to SharePoint or Confluence or Google Drive, fed into ticketing systems, or copied into slide decks. The document as a physical artifact is largely gone. What remains is a file format designed for physical artifacts, dragging all its print-era assumptions into a screen-first world.&lt;/p&gt;

&lt;p&gt;Page breaks that appear in the middle of your screen for no reason. Headers and footers that carry metadata nobody needs. Margins optimized for 8.5×11 paper that the document will never touch.&lt;/p&gt;

&lt;p&gt;Word documents are, in most enterprise workflows, print-ready objects that are never printed. The format is overhead.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;markdown-has-already-won-the-toolchain&quot;&gt;Markdown Has Already Won the Toolchain&lt;/h2&gt;

&lt;p&gt;Here’s what I’ve noticed: markdown is everywhere professionals actually build things.&lt;/p&gt;

&lt;p&gt;Every developer on your team writes it daily in GitHub — issues, pull requests, READMEs, wikis. Confluence supports it. Notion runs on it. Obsidian, Bear, Logseq — the serious note-taking apps people use for real work have all moved toward markdown or a close variant. Static site generators like Jekyll (what this blog runs on) use it natively. Documentation platforms like Docs-as-Code pipelines assume it. AI tools output it by default.&lt;/p&gt;

&lt;p&gt;This didn’t happen because of a marketing campaign. It happened because markdown solves the actual problem. Plain text is portable. It doesn’t carry hidden formatting state. It renders consistently. It survives being pasted into anything. It’s version-controllable without losing your mind. And it’s fast — the cognitive overhead of &lt;code class=&quot;highlighter-rouge&quot;&gt;##&lt;/code&gt; for a heading and &lt;code class=&quot;highlighter-rouge&quot;&gt;-&lt;/code&gt; for a list item is close to zero.&lt;/p&gt;

&lt;p&gt;Markdown won the developer toolchain first because developers had the lowest tolerance for formatting tax and the highest ability to route around it. But it’s been spreading. If you’re a security leader and you’re not already writing in markdown — your notes, your policies, your reports — you’re one tooling switch away from a noticeably lighter workflow.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;ai-is-the-new-presentation-layer&quot;&gt;AI Is the New Presentation Layer&lt;/h2&gt;

&lt;p&gt;Here’s where I think the trajectory gets really interesting.&lt;/p&gt;

&lt;p&gt;The old Word model bundled content and presentation together. You wrote &lt;em&gt;and&lt;/em&gt; formatted in the same tool at the same time, and the result was a fixed artifact.&lt;/p&gt;

&lt;p&gt;What I’ve moved to — and what I see accelerating across the tools I use — is a two-layer model:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer one: structured content.&lt;/strong&gt; Plain text, markdown, clear hierarchy, human-readable. This is where the thinking lives. This is the thing you write and edit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer two: AI-driven rendering.&lt;/strong&gt; You take that structured content and you tell an AI what you need — “format this as an executive briefing,” “turn this into a slide outline,” “write this up as a formal policy document,” “adapt this for a technical audience.” The AI handles the presentation for the context.&lt;/p&gt;

&lt;p&gt;I do this constantly now. I’ll write a rough set of observations in markdown, then ask Claude to render it as a polished post, a board-level summary, or a draft email, depending on who needs to see it. The content layer stays stable. The presentation layer adapts on demand.&lt;/p&gt;

&lt;p&gt;This is a fundamentally different model than Word, and it makes Word look like what it is: a tool that conflates writing with formatting at a time when those two things are better separated.&lt;/p&gt;

&lt;p&gt;The implication is that you don’t need Word’s formatting capabilities anymore — because you’re not doing the formatting. You’re writing structured content and delegating the rendering.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;enterprise-inertia-is-real-but-wont-save-it&quot;&gt;Enterprise Inertia Is Real but Won’t Save It&lt;/h2&gt;

&lt;p&gt;I’m not predicting Word disappears next year. Enterprise software has a half-life measured in decades. Legal templates, compliance documentation, procurement forms, board packages — a lot of this still runs on .docx and will keep running on .docx because the process was built around the file format and changing the process is expensive.&lt;/p&gt;

&lt;p&gt;But here’s how these transitions actually work: they don’t happen all at once. They happen one abandoned use case at a time.&lt;/p&gt;

&lt;p&gt;First the developers stop writing internal docs in Word. Then the technical writers move to Docs-as-Code. Then the security team starts keeping their runbooks in a git repo. Then someone’s AI assistant starts generating the first draft of that policy document in markdown and nobody feels like converting it. Then the new hire, who has never had a reason to learn Word’s style system, just… doesn’t.&lt;/p&gt;

&lt;p&gt;The enterprise inertia is real, but it protects the legacy use cases, not the growth edge. Every new workflow that gets built, every new tool that gets adopted, every new team member who joins with different defaults — those are the places where the old model doesn’t get reinstalled.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;what-this-means-for-how-you-work&quot;&gt;What This Means for How You Work&lt;/h2&gt;

&lt;p&gt;I’m not writing this to talk anyone into a migration project. But if you’re a practitioner who’s watching the same patterns I am, a few things are worth thinking about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your content should be portable.&lt;/strong&gt; If your knowledge and your documents are locked inside .docx files optimized for printing, you’re going to pay a translation tax every time you need that content somewhere else. Plain structured text survives context changes. Word files don’t.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Separate writing from formatting.&lt;/strong&gt; The instinct to make things look right while you’re writing them is understandable, but it burns attention that should go to the thinking. Write first in something that doesn’t distract you with style choices. Render later when you know what you need.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI makes the two-layer model practical.&lt;/strong&gt; The objection to markdown used to be that it doesn’t produce nice-looking output without effort. That objection is mostly gone now. If you can describe what you want the output to look like, an AI can produce it from your structured content.&lt;/p&gt;

&lt;p&gt;Word was the right tool for a print-first, format-as-you-go world. That world is shrinking. The document that lives as a fixed, formatted artifact is giving way to content that needs to be read in a browser, pasted into a ticket, rendered by an AI, and sent as three different things to three different audiences — all from the same underlying text.&lt;/p&gt;

&lt;p&gt;That’s a different problem. Markdown plus a capable AI is a better solution to that problem than Word is.&lt;/p&gt;

&lt;p&gt;The transition is already happening. You can see it in the toolchain, if you’re paying attention.&lt;/p&gt;</content><author><name>Jeff Whiteside</name><email>jeff@wh.itesi.de</email></author><category term="markdown" /><category term="ai" /><category term="tooling" /><category term="word-processing" /><category term="documentation" /><summary>I’ve been writing in markdown for years. This blog runs on it. My notes live in it. Most of my structured thinking starts in a plain text file with a handful of ## headers and some dashes.</summary></entry><entry><title>Ten Predictions for Where Security and GRC Are Headed</title><link href="https://wh.itesi.de/professional/commentary/2025/11/30/ten-predictions-security-grc.html" rel="alternate" type="text/html" title="Ten Predictions for Where Security and GRC Are Headed" /><published>2025-11-30T00:00:00-06:00</published><updated>2025-11-30T00:00:00-06:00</updated><id>https://wh.itesi.de/professional/commentary/2025/11/30/ten-predictions-security-grc</id><content type="html" xml:base="https://wh.itesi.de/professional/commentary/2025/11/30/ten-predictions-security-grc.html">&lt;p&gt;Every few years I like to capture a snapshot of where I think our industry is going. The goal isn’t clairvoyance; it’s documenting the patterns that seem durable and revisiting them later to see which ones held up. These aren’t moonshots or sci-fi scenarios. They are practical shifts already forming in the market and inside engineering teams.&lt;/p&gt;

&lt;p&gt;Here are my top ten predictions for the next two to three years.&lt;/p&gt;

&lt;h2 id=&quot;1-ai-becomes-embedded-in-everything&quot;&gt;1. AI becomes embedded in everything&lt;/h2&gt;

&lt;p&gt;AI stops feeling like a separate tool. It becomes part of every workflow, service, and platform. Most people will interact with AI through the products they already use rather than dedicated chat interfaces.&lt;/p&gt;

&lt;h2 id=&quot;2-grc-becomes-an-engineering-function&quot;&gt;2. GRC becomes an engineering function&lt;/h2&gt;

&lt;p&gt;The separation between GRC and engineering narrows. Compliance controls move into pipelines, infrastructure modules, and platform services. GRC engineering becomes the normal way companies operate.&lt;/p&gt;

&lt;h2 id=&quot;3-fewer-vendors-more-in-house-automation&quot;&gt;3. Fewer vendors; more in-house automation&lt;/h2&gt;

&lt;p&gt;AI-driven automation reduces the need for sprawling vendor ecosystems. Companies rely more on internal agents, internal pipelines, and custom logic rather than dozens of SaaS tools that exist solely to shuffle evidence and screenshots.&lt;/p&gt;

&lt;h2 id=&quot;4-a-partial-pivot-back-to-data-centers&quot;&gt;4. A partial pivot back to data centers&lt;/h2&gt;

&lt;p&gt;Cloud remains dominant, but cost pressure and predictable workloads push some organizations back toward on-prem compute. Specialized hardware for AI inference and control over data locality make hybrid strategies more appealing.&lt;/p&gt;

&lt;h2 id=&quot;5-security-engineering-collapses-into-platform-engineering&quot;&gt;5. Security engineering collapses into platform engineering&lt;/h2&gt;

&lt;p&gt;Platform teams absorb a significant portion of application security. IAM baselines, ingress patterns, policy-as-code, and hardened deployment paths ship as features of the internal developer platform. AppSec evolves from “approve and review” to “provide secure defaults that cannot be bypassed without intent.”&lt;/p&gt;

&lt;h2 id=&quot;6-compliance-frameworks-evolve-toward-automation-evidence&quot;&gt;6. Compliance frameworks evolve toward automation evidence&lt;/h2&gt;

&lt;p&gt;SOC 2, ISO, NIST CSF, PCI, and emerging AI-specific regulations shift toward system-generated evidence. Control maturity is measured by continuous signals rather than static documents.&lt;/p&gt;

&lt;h2 id=&quot;7-agentic-workflows-replace-traditional-dashboards&quot;&gt;7. Agentic workflows replace traditional dashboards&lt;/h2&gt;

&lt;p&gt;Teams move from dashboards filled with findings to autonomous agents running playbooks. Agents triage issues, file tickets, verify fixes, and escalate exceptions. Humans oversee prioritization and judgment instead of doing manual triage.&lt;/p&gt;

&lt;h2 id=&quot;8-data-becomes-the-new-perimeter-again&quot;&gt;8. Data becomes the new perimeter again&lt;/h2&gt;

&lt;p&gt;As compute shifts closer to on-prem and more models run locally, the control plane around data becomes more important than the one around networks. Lineage, classification, entitlements, and context-aware access policies become central.&lt;/p&gt;

&lt;h2 id=&quot;9-audit-cycles-shorten&quot;&gt;9. Audit cycles shorten&lt;/h2&gt;

&lt;p&gt;With continuous evidence exports, audits happen in smaller increments. Auditors pull from real-time data rather than scheduling long annual fieldwork cycles. Teams operate closer to continuous readiness.&lt;/p&gt;

&lt;h2 id=&quot;10-vendor-consolidation-pressures-the-large-suites&quot;&gt;10. Vendor consolidation pressures the large suites&lt;/h2&gt;

&lt;p&gt;Demand for unified data models pushes major platform vendors to simplify and consolidate their security and GRC tools. Customers want fewer dashboards, deeper integration, and consistent data models that feed cleanly into AI systems.&lt;/p&gt;

&lt;h2 id=&quot;looking-ahead&quot;&gt;Looking Ahead&lt;/h2&gt;

&lt;p&gt;Whether all ten predictions land isn’t the point. What matters is that the industry is clearly moving toward tighter alignment between engineering, automation, and risk management. The lines between security, GRC, and platform teams are already blurring. AI accelerates the trend, but the fundamentals remain the same: context, good design, and simplicity win.&lt;/p&gt;

&lt;p&gt;I look forward to revisiting this in a few years to see what aged well and what didn’t.&lt;/p&gt;</content><author><name>Jeff Whiteside</name><email>jeff@wh.itesi.de</email></author><summary>Every few years I like to capture a snapshot of where I think our industry is going. The goal isn’t clairvoyance; it’s documenting the patterns that seem durable and revisiting them later to see which ones held up. These aren’t moonshots or sci-fi scenarios. They are practical shifts already forming in the market and inside engineering teams.</summary></entry><entry><title>Buying the Tool Before Building the Process</title><link href="https://wh.itesi.de/security/operations/2025/09/21/buying-the-tools.html" rel="alternate" type="text/html" title="Buying the Tool Before Building the Process" /><published>2025-09-21T00:00:00-05:00</published><updated>2025-09-21T00:00:00-05:00</updated><id>https://wh.itesi.de/security/operations/2025/09/21/buying-the-tools</id><content type="html" xml:base="https://wh.itesi.de/security/operations/2025/09/21/buying-the-tools.html">&lt;p&gt;There’s a pattern I’ve seen repeat itself in security programs of all sizes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We buy the tool before we build the process.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The market is flooded with vendors offering point solutions for every imaginable security problem — cloud security posture management, identity governance, vulnerability scanning, risk quantification, AI-powered threat detection, and so on. The demos look slick. The dashboards are beautiful. The promise of automation is irresistible.&lt;/p&gt;

&lt;p&gt;And so the contract is signed.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;the-problem-starts-here&quot;&gt;The Problem Starts Here&lt;/h2&gt;

&lt;p&gt;But here’s what often happens next:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;The tool arrives before the team is ready.&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The processes to feed, tune, and monitor the tool are incomplete or non-existent.&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The staff who will operate and maintain the system weren’t involved in the buying decision.&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The organization mistakenly believes risk is now “handled” because a tool is in place.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Months later, the expensive software sits underutilized, poorly configured, or generating noise that no one has time (or training) to triage.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;buying-without-thinking-through-the-lifecycle&quot;&gt;Buying Without Thinking Through the Lifecycle&lt;/h2&gt;

&lt;p&gt;Security controls are not one-time installs. Every new tool you bring into the environment creates:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Integration work:&lt;/strong&gt; Does it fit into your existing tech stack? APIs? Data feeds?&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Maintenance overhead:&lt;/strong&gt; Who updates it? Patches it? Tunes it?&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;People requirements:&lt;/strong&gt; Do you have staff trained on it? If they leave, who backfills?&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Process dependencies:&lt;/strong&gt; How does it fit into incident response, governance reporting, or audit cycles?&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Metrics burden:&lt;/strong&gt; Are you measuring its efficacy and demonstrating its value?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If these conversations aren’t happening &lt;em&gt;before&lt;/em&gt; procurement, you’re signing up for shelfware risk.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;sometimes-manual-first-is-smarter&quot;&gt;Sometimes Manual First is Smarter&lt;/h2&gt;

&lt;p&gt;Ironically, &lt;strong&gt;starting with a manual process is often the better path&lt;/strong&gt;. When you begin manually — even if it’s painful — you:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Learn where the real friction is.&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Discover which data you actually need, and in what format.&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Understand how the process fits into your broader workflows.&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Avoid over-automating steps that may not even be necessary.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By &lt;strong&gt;feeling the operational pain&lt;/strong&gt;, your team builds real requirements based on lived experience — not based on a vendor pitch deck. Then, when you automate, you’re targeting the parts of the process that truly benefit from automation, rather than automating for automation’s sake.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;why-this-keeps-happening&quot;&gt;Why This Keeps Happening&lt;/h2&gt;

&lt;p&gt;There are several systemic drivers behind this behavior:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Executive pressure:&lt;/strong&gt; “Do something” often translates into “buy something.”&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Sales cycles optimized for buyer psychology, not operational reality.&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Fear of being behind peers who’ve bought similar tools.&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Overreliance on vendor claims rather than internal capability assessment.&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Disconnect between procurement, compliance, security leadership, and operations teams.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;a-more-sustainable-approach&quot;&gt;A More Sustainable Approach&lt;/h2&gt;

&lt;p&gt;Instead of racing to add another product, ask:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What problem are we solving?&lt;/li&gt;
  &lt;li&gt;Can we handle the operational burden?&lt;/li&gt;
  &lt;li&gt;Do we have process maturity to make this effective?&lt;/li&gt;
  &lt;li&gt;How will success be measured over time?&lt;/li&gt;
  &lt;li&gt;Who owns the tool once the initial deployment is complete?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In many cases, strengthening internal processes, training, and cross-functional alignment yields more risk reduction than adding another blinking dashboard.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;security-as-a-discipline-not-a-shopping-list&quot;&gt;Security as a Discipline, Not a Shopping List&lt;/h2&gt;

&lt;p&gt;Security isn’t about how many tools you own. It’s about how effectively your people, processes, and technology work together to reduce meaningful risk.&lt;/p&gt;

&lt;p&gt;The best security programs I’ve seen operate from this mindset:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;“Don’t buy what you can’t support.”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;These kinds of operational realities are at the heart of practical, business-aligned security leadership — the type of thinking I continue to explore on this site.&lt;/em&gt;&lt;/p&gt;</content><author><name>Jeff Whiteside</name><email>jeff@wh.itesi.de</email></author><summary>There’s a pattern I’ve seen repeat itself in security programs of all sizes:</summary></entry><entry><title>Managing Teams by Finding and Fueling Their Passions</title><link href="https://wh.itesi.de/leadership/2025/09/07/managing-people.html" rel="alternate" type="text/html" title="Managing Teams by Finding and Fueling Their Passions" /><published>2025-09-07T00:00:00-05:00</published><updated>2025-09-07T00:00:00-05:00</updated><id>https://wh.itesi.de/leadership/2025/09/07/managing-people</id><content type="html" xml:base="https://wh.itesi.de/leadership/2025/09/07/managing-people.html">&lt;p&gt;One of the most enduring leadership lessons I’ve learned is this: &lt;strong&gt;the happiest, most productive teams are built when people get to work on things they genuinely care about.&lt;/strong&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;leadership-isnt-about-control&quot;&gt;Leadership Isn’t About Control&lt;/h2&gt;

&lt;p&gt;Too often, management becomes an exercise in resource allocation, task assignment, and performance metrics. While those mechanics matter, they overlook a simple truth: people bring their best work when they’re engaged with work that energizes them.&lt;/p&gt;

&lt;p&gt;Effective leaders don’t simply assign tasks; they observe, listen, and uncover what motivates each team member. Sometimes that passion aligns directly with their current role. Other times, it may require some creative reshaping of responsibilities.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;passion-creates-durable-output&quot;&gt;Passion Creates Durable Output&lt;/h2&gt;

&lt;p&gt;When someone is excited about their work, you get more than just compliance — you get craftsmanship, creativity, and resilience. Passionate people:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Solve harder problems because they want to&lt;/li&gt;
  &lt;li&gt;Stick with complex issues longer without burning out&lt;/li&gt;
  &lt;li&gt;Bring forward ideas leadership might not have considered&lt;/li&gt;
  &lt;li&gt;Naturally seek out learning and improvement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is especially valuable in security, governance, and risk work where the subject matter can often feel abstract, bureaucratic, or thankless.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;the-managers-role-pattern-recognition&quot;&gt;The Manager’s Role: Pattern Recognition&lt;/h2&gt;

&lt;p&gt;Your job as a manager is not to manufacture passion, but to find where it already exists:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Who enjoys mentoring others?&lt;/li&gt;
  &lt;li&gt;Who lights up when digging into technical problems?&lt;/li&gt;
  &lt;li&gt;Who naturally gravitates toward process design?&lt;/li&gt;
  &lt;li&gt;Who is energized by presenting to stakeholders?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you know, you can start to shape assignments, projects, and career paths that align.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;balance-still-matters&quot;&gt;Balance Still Matters&lt;/h2&gt;

&lt;p&gt;Of course, not every task will be someone’s favorite. We all have to share operational toil, documentation, or administrative work. But if people spend most of their time on work they enjoy, the less glamorous parts become easier to absorb.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;final-thought&quot;&gt;Final Thought&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Teams built around individual passions are more stable, more resilient, and more innovative.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In leadership, our responsibility is to create the conditions where people do their best work. That often means being less of a director, and more of a talent scout.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;I share these kinds of reflections to help bridge leadership practice with real-world team dynamics.&lt;/em&gt;&lt;/p&gt;</content><author><name>Jeff Whiteside</name><email>jeff@wh.itesi.de</email></author><summary>One of the most enduring leadership lessons I’ve learned is this: the happiest, most productive teams are built when people get to work on things they genuinely care about.</summary></entry><entry><title>Private, Local Audio Transcription Without Compromise</title><link href="https://wh.itesi.de/secure/architecture/2025/08/26/private-transcription-guide.html" rel="alternate" type="text/html" title="Private, Local Audio Transcription Without Compromise" /><published>2025-08-26T00:00:00-05:00</published><updated>2025-08-26T00:00:00-05:00</updated><id>https://wh.itesi.de/secure/architecture/2025/08/26/private-transcription-guide</id><content type="html" xml:base="https://wh.itesi.de/secure/architecture/2025/08/26/private-transcription-guide.html">&lt;p&gt;Like most of us, I rely on voice memos more than I care to admit — quick ideas, reminders, sometimes full-on rants when my hands are busy. But getting those recordings transcribed always felt like a privacy tradeoff I wasn’t comfortable making.&lt;/p&gt;

&lt;p&gt;Most transcription tools out there (especially the accurate ones) ship your audio off to someone else’s cloud. And while that’s convenient, it also means sending sensitive content — personal or professional — into environments I don’t control.&lt;/p&gt;

&lt;p&gt;So I built my own stack.&lt;/p&gt;

&lt;p&gt;This post walks through how I now transcribe audio locally, without leaking data, and still get professional-grade results. It’s a bit of a choose-your-own-adventure setup, depending on what kind of speed and accuracy you need. All the code is &lt;a href=&quot;https://github.com/heffrey/transcriptions&quot;&gt;available on GitHub&lt;/a&gt; if you want to try it yourself.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;why-i-built-this&quot;&gt;Why I Built This&lt;/h2&gt;

&lt;p&gt;I didn’t start out trying to create four different transcription pipelines. I just wanted something fast, reliable, and private. But every tool had tradeoffs — GPU vs. CPU, speed vs. accuracy, simplicity vs. configurability. So I iterated until I had a few solid options.&lt;/p&gt;

&lt;p&gt;At a high level, the goals were:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;100% local processing&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;High transcription quality&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Zero data sent to third parties&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Works offline&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Flexible enough for different devices&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;the-tools-i-use&quot;&gt;The Tools I Use&lt;/h2&gt;

&lt;p&gt;Here are the transcription engines I ended up building or tweaking. Whisper is the standout, but Vosk has its place too depending on the context.&lt;/p&gt;

&lt;h3 id=&quot;1-whisper-with-gpu--fast-and-nearly-perfect&quot;&gt;1. Whisper with GPU — Fast and Nearly Perfect&lt;/h3&gt;

&lt;p&gt;This is my go-to. When I’m on a machine with a decent GPU, Whisper absolutely flies — transcribing a 90-second file in under 3 seconds with near-perfect accuracy.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;python transcribe_whisper.py &lt;span class=&quot;s2&quot;&gt;&quot;Recording.m4a&quot;&lt;/span&gt; -m large -d cuda
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Or if I’m doing something quick and don’t need top-tier accuracy:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;python transcribe_whisper.py &lt;span class=&quot;s2&quot;&gt;&quot;Recording.m4a&quot;&lt;/span&gt; -m tiny -d cuda
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Fallback to CPU works too — just slower.&lt;/p&gt;

&lt;p&gt;The best part? Nothing ever leaves my machine. No APIs. No terms of service. No telemetry.&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;2-fast-vosk--good-speed-solid-accuracy&quot;&gt;2. Fast Vosk — Good Speed, Solid Accuracy&lt;/h3&gt;

&lt;p&gt;This one is great when I need something simple and don’t have GPU access. It processes 90 seconds of audio in about 20–30 seconds and gets around 85% accuracy.&lt;/p&gt;

&lt;p&gt;I added chunking and threading to speed it up a bit. Here’s the core idea:&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# Split audio into 30s chunks&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;chunk_size&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;chunk_duration&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bytes_per_second&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# Multi-thread each chunk&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;chunk_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;chunk_data&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;chunks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;thread&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;threading&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Thread&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;lambda&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;results&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;transcribe_chunk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;chunk_data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;chunk_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;3-ultra-fast-vosk--when-i-just-want-a-draft&quot;&gt;3. Ultra-Fast Vosk — When I Just Want a Draft&lt;/h3&gt;

&lt;p&gt;I stripped things down to make this one even faster. 10–15 seconds for 90 seconds of audio. Accuracy is closer to 80%, but that’s fine when I just want to capture the gist of something.&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;4-standard-vosk--dead-simple-still-useful&quot;&gt;4. Standard Vosk — Dead Simple, Still Useful&lt;/h3&gt;

&lt;p&gt;This was my original setup. Slower (30–60 seconds per file), but it’s lightweight and doesn’t rely on anything fancy. Good to have in the toolkit, especially for low-resource systems.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;architecture-overview&quot;&gt;Architecture Overview&lt;/h2&gt;

&lt;p&gt;At the core, they all follow the same flow:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Convert audio to WAV&lt;/strong&gt; (using &lt;code class=&quot;highlighter-rouge&quot;&gt;ffmpeg&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Split into chunks&lt;/strong&gt; if needed&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Run local model inference&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Reconstruct the transcript&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here’s what I use for conversion:&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;cmd&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;'ffmpeg'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'-i'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m4a_path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
    &lt;span class=&quot;s&quot;&gt;'-acodec'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'pcm_s16le'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
    &lt;span class=&quot;s&quot;&gt;'-ar'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'16000'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
    &lt;span class=&quot;s&quot;&gt;'-ac'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'1'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
    &lt;span class=&quot;s&quot;&gt;'-y'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;output_path&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;And a quick check for GPU availability:&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;torch&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cuda&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;is_available&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;():&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;device&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;cuda&quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;device&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;cpu&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;why-this-matters&quot;&gt;Why This Matters&lt;/h2&gt;

&lt;p&gt;There are real privacy and security implications here. When you send voice memos to Google or Amazon for transcription, you’re handing over:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Personal notes&lt;/li&gt;
  &lt;li&gt;Business conversations&lt;/li&gt;
  &lt;li&gt;Sensitive context (legal, medical, financial)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even if you trust the service provider, you’re still subject to:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Data retention policies&lt;/li&gt;
  &lt;li&gt;Subpoenas&lt;/li&gt;
  &lt;li&gt;Algorithmic analysis&lt;/li&gt;
  &lt;li&gt;Who-knows-what usage agreements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By keeping everything local, I get full data sovereignty. And as someone who works in security, that matters.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;real-results&quot;&gt;Real Results&lt;/h2&gt;

&lt;p&gt;Whisper on GPU is hands-down the best performer:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Method&lt;/th&gt;
      &lt;th&gt;Time&lt;/th&gt;
      &lt;th&gt;Accuracy&lt;/th&gt;
      &lt;th&gt;Private&lt;/th&gt;
      &lt;th&gt;GPU&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Whisper (GPU)&lt;/td&gt;
      &lt;td&gt;~3s&lt;/td&gt;
      &lt;td&gt;90–95%&lt;/td&gt;
      &lt;td&gt;&lt;i class=&quot;fa fa-check&quot;&gt;&lt;/i&gt;&lt;/td&gt;
      &lt;td&gt;&lt;i class=&quot;fa fa-check&quot;&gt;&lt;/i&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Whisper (CPU)&lt;/td&gt;
      &lt;td&gt;~10–20s&lt;/td&gt;
      &lt;td&gt;90–95%&lt;/td&gt;
      &lt;td&gt;&lt;i class=&quot;fa fa-check&quot;&gt;&lt;/i&gt;&lt;/td&gt;
      &lt;td&gt;&lt;i class=&quot;fa fa-times&quot;&gt;&lt;/i&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Fast Vosk&lt;/td&gt;
      &lt;td&gt;~20s&lt;/td&gt;
      &lt;td&gt;85%&lt;/td&gt;
      &lt;td&gt;&lt;i class=&quot;fa fa-check&quot;&gt;&lt;/i&gt;&lt;/td&gt;
      &lt;td&gt;&lt;i class=&quot;fa fa-times&quot;&gt;&lt;/i&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Ultra-Fast Vosk&lt;/td&gt;
      &lt;td&gt;~10s&lt;/td&gt;
      &lt;td&gt;80%&lt;/td&gt;
      &lt;td&gt;&lt;i class=&quot;fa fa-check&quot;&gt;&lt;/i&gt;&lt;/td&gt;
      &lt;td&gt;&lt;i class=&quot;fa fa-times&quot;&gt;&lt;/i&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Standard Vosk&lt;/td&gt;
      &lt;td&gt;~45s&lt;/td&gt;
      &lt;td&gt;85%&lt;/td&gt;
      &lt;td&gt;&lt;i class=&quot;fa fa-check&quot;&gt;&lt;/i&gt;&lt;/td&gt;
      &lt;td&gt;&lt;i class=&quot;fa fa-times&quot;&gt;&lt;/i&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;And a quick transcription comparison:&lt;/p&gt;

&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Original:     “Thank you for trusting me with all that.”
Vosk Output:  “thank you for trusting you with all that”
Whisper:      “Thank you for trusting me with all that.”
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;setup-and-cost&quot;&gt;Setup and Cost&lt;/h2&gt;

&lt;p&gt;Everything I’ve built is open source and runs locally. No usage fees. Just download the models and go. You can find all the scripts, setup instructions, and documentation in the &lt;a href=&quot;https://github.com/heffrey/transcriptions&quot;&gt;transcriptions repository&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Whisper&lt;/strong&gt;: Requires &lt;code class=&quot;highlighter-rouge&quot;&gt;torch&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;ffmpeg&lt;/code&gt;, model files&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Vosk&lt;/strong&gt;: Lightweight, minimal dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The only cost is your hardware. If you’ve got a decent GPU, Whisper sings.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;whats-next&quot;&gt;What’s Next&lt;/h2&gt;

&lt;p&gt;This stack works great for me today, but I’m planning to add:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Real-time transcription&lt;/li&gt;
  &lt;li&gt;Multi-language support&lt;/li&gt;
  &lt;li&gt;Speaker labeling&lt;/li&gt;
  &lt;li&gt;Web interface for file uploads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s also easy to imagine this integrating into note-taking workflows, journaling apps, or secure comms platforms.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;final-thought&quot;&gt;Final Thought&lt;/h2&gt;

&lt;p&gt;There’s no reason voice transcription should be a privacy sacrifice. The tools are out there — they just need stitching together in the right way.&lt;/p&gt;

&lt;p&gt;And honestly? It’s kind of fun.&lt;/p&gt;

&lt;p&gt;If you want to try this yourself, check out the &lt;a href=&quot;https://github.com/heffrey/transcriptions&quot;&gt;transcriptions repository&lt;/a&gt; on GitHub. It includes all four scripts, setup instructions, and everything you need to get started with private, local transcription.&lt;/p&gt;</content><author><name>Jeff Whiteside</name><email>jeff@wh.itesi.de</email></author><summary>Like most of us, I rely on voice memos more than I care to admit — quick ideas, reminders, sometimes full-on rants when my hands are busy. But getting those recordings transcribed always felt like a privacy tradeoff I wasn’t comfortable making.</summary></entry><entry><title>Security is a Tradeoff, Not a Checklist</title><link href="https://wh.itesi.de/professional/commentary/2025/07/13/security-checklists.html" rel="alternate" type="text/html" title="Security is a Tradeoff, Not a Checklist" /><published>2025-07-13T00:00:00-05:00</published><updated>2025-07-13T00:00:00-05:00</updated><id>https://wh.itesi.de/professional/commentary/2025/07/13/security-checklists</id><content type="html" xml:base="https://wh.itesi.de/professional/commentary/2025/07/13/security-checklists.html">&lt;p&gt;One of the most persistent misconceptions in security leadership is the idea that security can be reduced to a set of checkboxes. That once you’ve completed every requirement on a framework, standard, or audit list — you’re “secure.”&lt;/p&gt;

&lt;p&gt;This mindset is not only false — it’s dangerous.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;security-controls-solve-problems--not-checkboxes&quot;&gt;Security Controls Solve Problems — Not Checkboxes&lt;/h2&gt;

&lt;p&gt;Every control in a security framework exists because it aims to address a particular risk. But too often, practitioners get locked into the &lt;em&gt;form&lt;/em&gt; of the control, while forgetting the &lt;em&gt;function&lt;/em&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;A password complexity requirement exists to mitigate credential compromise.&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;A change management control exists to prevent unauthorized or risky changes.&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;A vendor due diligence process exists to reduce exposure to third-party risk.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But real-world business environments often evolve faster than frameworks do. If we only focus on whether a control was implemented “as written,” we miss opportunities to solve the underlying problem more effectively — and sometimes more securely.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;example-password-complexity-vs-passwordless-authentication&quot;&gt;Example: Password Complexity vs. Passwordless Authentication&lt;/h2&gt;

&lt;p&gt;A textbook example is password policy. Many organizations cling to increasingly complex password rules: 16 characters, special symbols, forced rotation every 60 days.&lt;/p&gt;

&lt;p&gt;Ironically, these rules often lead to worse outcomes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Users write passwords down.&lt;/li&gt;
  &lt;li&gt;People reuse passwords across systems.&lt;/li&gt;
  &lt;li&gt;Support teams deal with constant reset requests.&lt;/li&gt;
  &lt;li&gt;Attackers exploit predictable patterns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;em&gt;risk&lt;/em&gt; these rules aim to mitigate is unauthorized access. But alternative controls — such as passkeys, WebAuthn, or hardware tokens — eliminate shared secrets altogether and reduce the attack surface substantially.&lt;/p&gt;

&lt;p&gt;In this case, abandoning the checklist-driven approach entirely can &lt;strong&gt;lower risk&lt;/strong&gt; rather than increase it.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;example-compliance-interpretation-vs-business-aligned-security&quot;&gt;Example: Compliance Interpretation vs. Business-Aligned Security&lt;/h2&gt;

&lt;p&gt;Another common scenario arises in compliance-heavy industries. A framework might require “multi-factor authentication for privileged access.”&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A checklist-driven auditor may insist that SMS-based OTP codes qualify.&lt;/li&gt;
  &lt;li&gt;A thoughtful security leader might advocate for phishing-resistant authentication (FIDO2, biometrics, or hardware tokens).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both “meet” the requirement on paper — but one better mitigates modern threat scenarios.&lt;/p&gt;

&lt;p&gt;The most mature organizations take these moments to engage with auditors, explain rationale, and document &lt;strong&gt;compensating controls&lt;/strong&gt; that better address the risk than the original prescriptive language.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;tradeoffs-are-inevitable--avoiding-the-lazy-default&quot;&gt;Tradeoffs Are Inevitable — Avoiding the Lazy Default&lt;/h2&gt;

&lt;p&gt;Security is filled with legitimate tradeoffs:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Friction vs. Adoption:&lt;/strong&gt; How much user resistance will a control introduce?&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Cost vs. Coverage:&lt;/strong&gt; Are we solving our highest priority risks first?&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Speed vs. Diligence:&lt;/strong&gt; When do we accept fast iteration over exhaustive vetting?&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Standardization vs. Flexibility:&lt;/strong&gt; Should we apply the same control to every asset, or tailor it based on sensitivity?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key is to avoid defaulting into “safe” checkbox answers simply because they’re familiar or easier to justify. Often, business-aligned alternatives not only maintain compliance — they &lt;em&gt;improve&lt;/em&gt; security posture.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;the-role-of-security-leadership&quot;&gt;The Role of Security Leadership&lt;/h2&gt;

&lt;p&gt;Effective security leaders act as translators between frameworks and reality:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Understand &lt;strong&gt;the intent&lt;/strong&gt; behind controls.&lt;/li&gt;
  &lt;li&gt;Propose creative, risk-aligned alternatives when prescriptive controls no longer fit.&lt;/li&gt;
  &lt;li&gt;Engage auditors and regulators in good faith, using evidence-based reasoning.&lt;/li&gt;
  &lt;li&gt;Avoid control stacking that adds complexity but not meaningful security.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not about cutting corners — it’s about solving problems &lt;strong&gt;intelligently&lt;/strong&gt;, respecting both security objectives and business needs.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;closing-thought&quot;&gt;Closing Thought&lt;/h2&gt;

&lt;p&gt;Security isn’t a checklist to complete. It’s a continuous negotiation between evolving risks, operational realities, and organizational priorities. The best security leaders don’t obsess over how many boxes are checked — they obsess over whether the real risks are being mitigated.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;This post reflects the kind of pragmatic, real-world security thinking I continue to explore on this site — where nuance matters more than dogma.&lt;/em&gt;&lt;/p&gt;</content><author><name>Jeff Whiteside</name><email>jeff@wh.itesi.de</email></author><summary>One of the most persistent misconceptions in security leadership is the idea that security can be reduced to a set of checkboxes. That once you’ve completed every requirement on a framework, standard, or audit list — you’re “secure.”</summary></entry><entry><title>Vendor Risk Management: Build Relationships, Guide Smart Choices, and Make Vendors Squirm</title><link href="https://wh.itesi.de/vendor/risk/management/2025/06/29/vendor-risk.html" rel="alternate" type="text/html" title="Vendor Risk Management: Build Relationships, Guide Smart Choices, and Make Vendors Squirm" /><published>2025-06-29T00:00:00-05:00</published><updated>2025-06-29T00:00:00-05:00</updated><id>https://wh.itesi.de/vendor/risk/management/2025/06/29/vendor-risk</id><content type="html" xml:base="https://wh.itesi.de/vendor/risk/management/2025/06/29/vendor-risk.html">&lt;p&gt;One of the most underrated tools in a security leader’s arsenal isn’t a piece of technology, a framework, or a control checklist. It’s &lt;strong&gt;vendor risk management&lt;/strong&gt; used as a strategic relationship-building function.&lt;/p&gt;

&lt;p&gt;Too often, third-party risk reviews get reduced to a compliance formality: fill out a questionnaire, attach a SOC 2, check a box. But when done well, vendor risk management becomes a way to:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Influence vendor behaviors&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Protect the business from poor technical decisions&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Expose weak design choices early&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Strengthen cross-functional alignment&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vendor risk isn’t just a task for compliance and procurement teams — it must actively involve the technical teams who will own, operate, and support the solution long-term. These are the teams best positioned to identify operational risks, integration challenges, and architectural weaknesses that may not be visible on a vendor questionnaire.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;getting-vendors-to-squirm-productively&quot;&gt;Getting Vendors to Squirm (Productively)&lt;/h2&gt;

&lt;p&gt;One of the best ways to drive technical rigor is to make vendors &lt;em&gt;uncomfortable&lt;/em&gt; — not by being hostile, but by asking the questions that expose design tradeoffs they hoped no one would notice.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;“Walk me through your data segregation model.”&lt;/li&gt;
  &lt;li&gt;“How are cryptographic keys generated, rotated, and destroyed?”&lt;/li&gt;
  &lt;li&gt;“What telemetry will we have access to in a breach scenario?”&lt;/li&gt;
  &lt;li&gt;“What level of control do we have over user provisioning and deprovisioning?”&lt;/li&gt;
  &lt;li&gt;“Where exactly does our data physically reside?”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When a vendor can’t answer confidently, or needs to ‘get back to you,’ that tells you more than any audit report.&lt;/p&gt;

&lt;p&gt;You’re not trying to fail them. You’re giving them an opportunity to prove technical maturity — or reveal risk early enough that you can make informed choices.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;the-sales-process-is-where-failure-begins&quot;&gt;The Sales Process Is Where Failure Begins&lt;/h2&gt;

&lt;p&gt;In many cases, third-party integration projects are doomed from the moment the sales cycle begins — because technical stakeholders weren’t involved.&lt;/p&gt;

&lt;p&gt;If engineers aren’t talking to each other early, you’re flying blind:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Are APIs compatible?&lt;/li&gt;
  &lt;li&gt;Are dependencies well documented?&lt;/li&gt;
  &lt;li&gt;Is data schema alignment feasible?&lt;/li&gt;
  &lt;li&gt;Are integration assumptions realistic?&lt;/li&gt;
  &lt;li&gt;Is vendor uptime actually sufficient?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By inserting vendor risk management into the &lt;strong&gt;sales due diligence phase&lt;/strong&gt;, you force the right conversations to happen upfront. Security isn’t just protecting data; it’s helping the business avoid operational failure modes.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;relationship-building-not-just-gatekeeping&quot;&gt;Relationship-Building, Not Just Gatekeeping&lt;/h2&gt;

&lt;p&gt;Vendor risk management is most effective when it acts as a &lt;strong&gt;partner to the business&lt;/strong&gt;, not an obstacle:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Provide vendor teams with your security requirements early.&lt;/li&gt;
  &lt;li&gt;Offer technical workshops with your engineering team during vendor evaluation.&lt;/li&gt;
  &lt;li&gt;Help business sponsors understand where certain vendors pose higher operational complexity.&lt;/li&gt;
  &lt;li&gt;Document mitigation paths, exceptions, and compensating controls transparently.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not to prevent the business from moving forward — it’s to guide them toward vendors who can truly support your operational and security posture.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;the-hidden-roi-of-vendor-risk&quot;&gt;The Hidden ROI of Vendor Risk&lt;/h2&gt;

&lt;p&gt;When vendor risk management operates at this level, you get much more than a questionnaire:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Fewer integration failures&lt;/li&gt;
  &lt;li&gt;Shorter onboarding timelines&lt;/li&gt;
  &lt;li&gt;Higher vendor accountability&lt;/li&gt;
  &lt;li&gt;More leverage in contract negotiations&lt;/li&gt;
  &lt;li&gt;Better preparation for audits and incidents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short: better security, better business outcomes.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;final-thought&quot;&gt;Final Thought&lt;/h2&gt;

&lt;p&gt;Vendor risk management isn’t about paperwork. It’s about &lt;strong&gt;forcing hard conversations early&lt;/strong&gt; — when you still have leverage, when you can still walk away, and when the cost of failure is still theoretical.&lt;/p&gt;

&lt;p&gt;Done well, it becomes a core part of pragmatic security leadership: making smart decisions, guiding your business partners, and ensuring your vendors work for &lt;em&gt;you&lt;/em&gt; — not the other way around.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;This reflects the kind of real-world security leadership I explore here — where security and business strategy align to drive better outcomes.&lt;/em&gt;&lt;/p&gt;</content><author><name>Jeff Whiteside</name><email>jeff@wh.itesi.de</email></author><summary>One of the most underrated tools in a security leader’s arsenal isn’t a piece of technology, a framework, or a control checklist. It’s vendor risk management used as a strategic relationship-building function.</summary></entry></feed>
