russell.ballestrini.net/content/2026-03-20-i-am-a-software-mechanic.rst

246 lines
9 KiB
ReStructuredText

I Am a Software Mechanic
########################
:author: Russell Ballestrini
:slug: i-am-a-software-mechanic
:date: 2026-03-20 12:00
:tags: Opinion, Code
:status: published
That job title doesn't exist yet on any W-2.
But it describes exactly what I do.
You call me when a machine-generated tool breaks something real.
A harvest lost. A contract mispriced. A greenhouse running dry.
I show up. I read the spec. I find the gap between what someone told the machine to do & what the world actually did.
Then I fix it. Unfortunately, not every job arrives as a Jira ticket.
Some come undisciplined & urgent, undergoing triage in a Slack room without a number.
One of those could terminate you into unemployment.
One of those could fire you.
**The pay reflects the gap between what this work actually does & what people think it costs.**
Software mechanics don't write code.
We maintain code that writes code.
Nobody budgeted for that role yet.
So most of us patch things on a handshake & call it consulting.
I keep a box of $4 toggle switches in my basement.
Not for the wiring.
For the clients who need to feel like they still have a hand on the wheel.
---
**Life as a software mechanic sucks. Let me explain.**
Every upstream dependency mutates without a release note.
Weather models recalibrate. Pricing APIs shift. ML models get quietly retrained.
Your client's tool keeps running. Keeps returning confident outputs.
Nobody notices until someone loses $25,000 in undersized cabbage.
Then they call you. You charge $200 for the visit.
You spend 4 hours diagnosing a spec that never mentioned the weather service it silently relied on.
You bill 4 hours. You eat 2.
The client balks at the invoice because "it's just a setting."
I never haggle. I work on my own ideas & try to sell them.
Never works.
**This happens every week.**
Tools get better. Specifications don't keep pace.
The world underneath the specs never simplifies.
So the gap between intent & execution keeps widening.
Someone has to crawl into that gap.
That someone doesn't have a union. Doesn't have a job board.
Doesn't have a standard rate card.
Mostly posts on forums & waits for DMs. Ununion.
This blog goes back to 2010.
Every post, a spec against territory.
Most technical posts need no update. Ground beneath them held.
Others aged out quietly. A Minikube guide. A CircleCI config. A FreeNAS fallback tutorial. Accurate when written. Overtaken soon after.
Not failure. Just terrain. Most stays. Some shifts while you stand on it. An unquake.
---
**Why this matters right now:**
A post on `nearzero.software <https://nearzero.software/p/warranty-void-if-regenerated>`_ by Scott Werner called "Warranty Void If Regenerated" nails the shape of this work.
Tom Hartmann, a fictional software mechanic in rural Wisconsin, visits three clients in a day.
Three different failure modes. Three different root causes.
All of them trace back to specifications that didn't account for a world that moves.
Read it. Then come back for your homework.
---
HOMEWORK ASSIGNMENT
===================
.. class:: center
**Word Hunt — "Warranty Void If Regenerated"**
.. class:: center
*For students learning about software, language, & the `un` prefix*
|
**Your mission:**
Scrape `https://nearzero.software/p/warranty-void-if-regenerated <https://nearzero.software/p/warranty-void-if-regenerated>`_.
Find every word that starts with ``un``.
List them alphabetically.
Write your best definition for each word.
Then check your answers below.
|
**Scraping starter (Python):**
.. code-block:: python
import urllib.request
from html.parser import HTMLParser
import re
url = "https://nearzero.software/p/warranty-void-if-regenerated"
with urllib.request.urlopen(url) as response:
html = response.read().decode("utf-8")
# strip tags, split on whitespace, find un* words
text = re.sub(r"<[^>]+>", " ", html)
words = text.split()
un_words = sorted(
w.strip(".,;:!?\"'()[]").lower()
for w in words
if w.lower().startswith("un")
)
print(f"all occurrences ({len(un_words)}):")
for word in un_words:
print(word)
distinct = sorted(set(un_words))
print(f"\ndistinct words ({len(distinct)}):")
for word in distinct:
print(word)
|
**Define each word you find. Write your definitions before clicking the answer sheet.**
|
.. raw:: html
<details>
<summary style="cursor:pointer; font-weight:bold; font-size:1.1em; padding:0.5em 0; user-select:none;">
▶ Click to reveal answer sheet
</summary>
<div style="margin-top:1em; padding:1em; border-left:3px solid #666;">
<p><strong>Words starting with <code>un</code> found in the article:</strong></p>
<ol>
<li>
<strong>under-watered</strong><br>
Past tense: Carol under-watered the clay spot. Not a mistake. Thirty years of site knowledge encoded in action, never in words.
</li>
<li>
<strong>under-watering</strong><br>
The act of applying less water than a baseline recommends. Carol does this on purpose. Tyler's spec doesn't know. Neither does the sensor.
</li>
<li>
<strong>underlying</strong><br>
The foundation below what you see. The "underlying weather models" power the harvest tool but live outside its spec. When they change, the tool breaks. Nobody planned for that.
</li>
<li>
<strong>underneath</strong><br>
Below the surface, literally & figuratively. Clay sits underneath Carol's greenhouse soil. And underneath client resistance, Tom finds a real question every time.
</li>
<li>
<strong>underpriced</strong><br>
Sold for less than actual value. Ethan's miswired feed tool caused automated contracts to lock in milk prices below market. A small parsing error. A three-month loss.
</li>
<li>
<strong>undersized</strong><br>
Below the grade threshold. Margaret's early-harvested cabbage came in undersized. Undersized gets a discount. $25,000 worth of discount.
</li>
<li>
<strong>understand</strong><br>
To grasp deeply enough to use. Tom's central argument: a software mechanic in a farming town needs to understand farming. Not software. Farming.
</li>
<li>
<strong>understood</strong><br>
Past tense of understand. Hardware people understood atoms. Software people understood bits. People understood coffee. Coffee became Tom's benchmark for explaining spec complexity.
</li>
<li>
<strong>uneventful</strong><br>
Nothing went wrong. Tom's afternoon checkups ran uneventful. He appreciated that more than his clients probably knew. An uneventful visit means the spec held. That's a win.
</li>
<li>
<strong>unexpected</strong><br>
Something that arrived without warning. Carol's reaction to her grandson's irrigation upgrade matched "the expression people reserve for wasps' nests & unexpected tax bills." Technically superior. Emotionally disastrous.
</li>
<li>
<strong>unfortunately</strong><br>
Signals a gap between how things should work & how they do. "Unfortunately, software maintenance was a next-Tuesday problem in a world that was very good at producing lions."
</li>
<li>
<strong>unkindly</strong><br>
Without harshness. Tom delivers the spaghetti diagnosis "not unkindly." The word does quiet work: it marks him as someone who fixes things without making people feel broken.
</li>
<li>
<strong>unless</strong><br>
A conditional that marks the edge of machine knowledge. "That's a detail the AI has no way of knowing matters <em>unless</em> you tell it." One word. The whole argument.
</li>
<li>
<strong>until</strong><br>
The moment a static spec meets a dynamic world. "The tool worked perfectly <em>until</em> the world shifted underneath it." Until signals latent failure. The gap existed before the loss. You just couldn't see it yet.
</li>
</ol>
<p><em>14 unique words. 35 total occurrences. <code>understood</code> appears 8 times. <code>underneath</code> appears 5 times. All the same prefix. All pointing at the same problem: something below, something before, something outside the spec.</em></p>
</div>
</details>
|
---
Software mechanics study language too.
Prefixes carry meaning. ``un`` signals what sits below the surface, before the failure, outside the specification.
Good luck.
---
**Unextreme risk for extreme leverage.**
.. image:: /uploads/2026/03/leverage.svg
:width: 100%
:align: center
Employee labor will matter more than executive execution.
.. image:: /uploads/2026/03/partnership.svg
:width: 100%
:align: center
Machine learning makes bottom-up viable. A partnership of zero employees, no payroll, no org chart, just two people with complementary specs & a shared gap to close. Zero hands. No hierarchy. Work flows to whoever holds the spec.
The executive suite optimized for control. Machine learning optimizes for outcome. Those two things don't point at the same person anymore.
.. contents::