Blog

Finkelstein's Immaturity Model

Only by a miracle can a Level -2 organisation produce any useable software. As Level -2 organisations rarely get beyond specification they pin their hopes on automatically generating a program from that specification.

finkelstein’s software immaturity model
Finkelstein’s Immaturity Model

LLM’s are doing an impressive job of getting us from conversations to requirements to specifications to code, but when I look at that diagram, I have a visceral sense of what 2025’s Level -2 is.

Continue reading →


Password Of The Day

So you’re telling me you wrote an unsalted, date-seeded, unsigned, deterministic password generator?

In the initial interview, the client expressed a desire to modernize their security. They wanted someone with multiple iterations of implementing other types of authentication. MFA, passwordless device flows, SSO. I told them I was pretty well versed in SAML and OIDC, and had some hard-earned experience doing multi-generational technology leaps, and thought I might be well suited for the task. I even worried that I had insulted the manager’s competence by claiming Basic Auth is (still) a useful stepping stone in some scenarios.

Continue reading →


People CMM is a Management Consulting Wet Dream

When I first heard that the SEI had a lesser-known counterpart to its Capability Maturity Model (CMM) called People CMM (P-CMM), I had to DuckDuckGo if it was a joke.

It isn’t, except in the same sense that CMM-I is a kind of cruel joke.

P-CMM uses the same 5 levels as the SEI CMM to “systematically transform chaotic workforce practices into strategic capability development” across 22 process area. Without any sense of irony, the process professes to “address critical people issues in your organization”, then immediately dropping the word “people” in favor of the terms “workforce” and “resource.”

p-cmm chart but spicy

Continue reading →


Type 1 and Type 2 Consulting

I sat down to lambaste what I view as the outsourcing of thought by management teams, but then I got to thinking about NIHS (Not Invented Here Syndrome) in some organizations, and the (often concurrent) complete outsourcing of thought to consultants and hype mongers.

Where is the balance of internal capability and external expertise?

I think the scales get tipped one way or another by motivation. I’ve been brought onboard for two broad categories of needs. I don’t have names for these two groups, other than to say there are two of them.

Type 1 #

  • Temporarily fill capability gaps (development, security, infrastructure)
  • Provide an unbiased opinion (is our approach viable?)
  • Boost horsepower (new products and markets)
  • Train and mentor
  • App Rationalization (we have all these systems, they overlap in some places but fail to integrate in others)

Type 2 #

  • Provide plausible deniability (the consultants told us to do this thing we were probably going to do anyways)
  • Win arguments (appeals to authority)
  • Compliance or regulatory requirements (ISO 9001, SOC 2 Type 2, privacy laws, HIPAA)
  • Boost horsepower (tech debt logjams)
  • Keep the ship afloat (SRE, SysOps, Duct Tape)
  • Implement a hyped technology for marketing or shareholders (crypto, AI)
  • Fix outsourcing disasters (we found a company that would provide us developers for $40/hour, but communication has been bad and the system is faulty)

Continue reading →


Protect Others' Self Esteem

Nobody ever calls me because things are going well.

When the Outsiders arrive (consultant, contractor, new guy, whatever), they will be full of “best practices” and experiences codged from other, more fanciful clients. They look around, horrified, because they have a keen eye for the dysfunctional. I’ll be the first to admit, I see bad security, architecture, process, design, whatever it is - and my first reaction is an emotional one. Usually angry, usually self-righteous.

Continue reading →


Solution Late

There is nothing quite so useless as doing with great efficiency something that should not be done at all — Peter Drucker

Despite what the godfather of management says, what the engineers want to talk about is:

  • Programming languages
  • AI
  • Cloud providers
  • UI Libraries
  • APIs
  • DevOps
  • Architecture patterns
  • Databases

I’m a people person damnit

What the customer doesn’t care about: (see above).

The things in the list don’t even matter! They’re fungible. Given three mainstream choices for programming language, AI, cloud, etc., literally any combination of them is sufficient.

Continue reading →


The NSO (No Sign On) Auth Scheme

In what is perhaps the most brilliant act of malicious compliance I have ever witnessed…

Early in my career I bullied my way into a de facto tech lead position on a small software team in a pretty big organization.

The most powerful and vocal of our users used our software passively as a kind of combination dashboard and news aggregator. They had lots of passwords to lots of systems, and they did not want another one for ours. They made this very clear - not one more goddamned password.

Continue reading →



Endless Yak Shave

Weekend plan: migrate authentication to OIDC. Four hours later I’m debugging if I can symlink my way to success with Claude Code, Cursor, and Junie. GPT5 is released, maybe that will just do this for me, time to re-enable my OpenAI account and generate an API key. I learn each tool’s proprietary file formats and locations, MCP configs, keyboard shortcuts, and licensing terms. Which one has reasoning? What’s the TPS? Can I make it stop being such a goddamned sycophant?

Continue reading →


Attention Spans

Our nonscientific study suggests that, on average, business people can pay attention for no more than thirty to sixty seconds without being distracted by an unrelated thought.

The Trusted Advisor: 20th Anniversary Edition by David H. Maister, Charles H. Green, et al.

Continue reading →


Spike Avoidance

A spike is a sudden, dramatic increase in demand, effort, or activity that far exceeds normal operating levels. I consider spikes a threat to sustainability.

Startup culture’s reliance on the veneer of coolness and a potential future payoff as a way to fortify employees against these spikes will shape the workforce, selecting for younger people who are more naive and risk tolerant. The effects of this compound over time.

Continue reading →


Automated Commit Messages and Flow State

I recently came across OpenCommit, which claims to “generate commit messages with an LLM in 1 sec”. Here’s what’s good:

  • Helps maintain flow state - you can fire-and-forget and the messages are about as accurate as they’d be if a human wrote them
  • Available on the command line, just oco
  • Works reasonably well with local models running via ollama serve
  • MIT Licensed

Regarding “flow”, pay attention the next time you write a commit message. Do you feel the context switch happening as you go from “doing” to “documenting”? I do, and I have aversion to that feeling.

Continue reading →


Tmux Mouse Support

After over 2 decades using GNU Screen for multiplexing, often on machines where tmux wasn’t a sensible option, I’ve realized that I’ll probably never find myself telnetting (!) into a solaris box again.

Still, tmux doesn’t “just work” the way I want with the Mac OS terminal. I am aware iterm2, wezterm, kitty and several others exist, but it’s 2025 and I’m just now migrating away from screen, so that’s the level of stodge I’m at. I still want to use the mouse to copy/paste text while I change my muscle memory from screen to tmux.

Continue reading →





Just use {{my favorite tech}}...

Here’s some shit developers say to each other when the other person is stuck and we don’t actually have an answer to their problem.

  • Just use PHP, Django, Rails, fuck it just use PHP (Laravel, you know)
  • Just use Emacs, Sublime, vim, macvim, neovim, Intellij, Cursor, fuck it just use Notepad
  • Just get a Mac, use debian, use ubuntu, use centos fuck it just use WSL

Continue reading →



Two Types of Stability

In order to survive, the human body maintains stability in two ways.

Homeostasis — the process of maintaining internal stability by adhering to fixed points.

Examples: maintaining optimal pH, liver enzymes, body temperature

Allostasis — the process of obtaining stability by adapting to anticipated demands or environmental stressors.

Examples: cortisol during fight or flight, inflammatory responses, shunting of blood

Both are necessary for survival. One is required to keep the organism alive over the long term, the other helps us respond to emergent or future scenarios.

Continue reading →


Challenging the Supremacy of Flow State

I’ve long thought that the ability to maintain flow state for hours was the hallmark of a good programmer. I prided myself on being in such a deep state of flow that I would often fail to notice the passing of hours, the setting sun. I would often only reluctantly step away to pee. I would work late into the night, uninterrupted by the world.

As the systems I’ve worked on have become more complex, technologically diverse, and frankly riddled with errors, I’ve realized that what I thought of as “flow” is actually just a state of chasing my own thoughts, trying to immediately fix whatever annoyances or weirdnesses I encounterd, and finishing my days not having completed my initial goals for the day.

Continue reading →