← ::root

An INTP's Systems Guide to Escaping the 3Ps

Perfectionism, Procrastination, Paralysis: Modeled as systems failures

Introduction

Years ago, I took the MBTI test on 16Personalities and learned that my personality falls in the INTP ("The Logician") category. I recently revisited the characteristics and literally laughed out loud. It describes me to a T, especially the non-conventional part. At a prior big bank corporate job, I recall asking my manager, after she caught me walking shoeless, if I could continue doing so. After all, it was super comfortable, and my feet were very hygienic, if I must say so myself. I saw the raised eyebrows. So I did the right thing — I put my shoes back on...and only started walking shoeless after hours.

On a side note, I believe in acute positive stress testing of systems — from daily cold showers to walking outside jacketless and in shorts in extreme winters (yes, I positively and acutely stress my biological system as well). Whether being shoeless in an office counts as social norm stress testing, I'll let Reddit decide. Either way, the raised eyebrows were data. Ok, let's lace up and get back on track!

The Problem This post is not about being shoeful vs. shoeless at the office. The focus here is on a specific weakness: Overthinking / Analysis Paralysis — struggling to make decisions because you continuously overanalyze potential outcomes.

If you are that person who writes a detailed to-do list weeks out only to drop it, who runs endless "what-if" thought experiments without executing, or who gets stuck in the learn-before-doing rabbit hole instead of actually building...then I can relate. I used to do this a lot, and still catch myself doing it, especially in the theory phase. To be fair, this mindset is highly powerful in the right domains (research, abstract math, theoretical physics, etc.) but in most day-to-day situations, it becomes a severe liability.

So I had to build systems to counter it.

Pruning Algorithm Because if your mind can generate infinite branches, you need a pruning algorithm.

The LAP Principle

The LAP principle is a continuous feedback loop I came up with years ago when I used to run. Even if you don't present your work to others, you must present it to your future self: write, record, document — do whatever it takes to solidify the output. Without the P, most people stay stuck in the L phase forever.

The LAP Loop [Learn] ────────► [Apply] ▲ │ │ ▼ [Improve] ◄────── [Present]

L: Learn

When I approach a new topic, I naturally start with theory. Coming from a math & software engineering background, when I wanted to understand what happens at the metal, I went deep into digital design and computer architecture. I bought books and read a massive amount of theory. (Side note: I debated calling this TAP for Theorize or RAP for Read, but LAP stuck — the race track visual matters, and reading is only one form of learning.)

A: Apply

This is where most people stall. I force myself to apply the theory immediately by working through end-of-chapter problems, creating my own parameters, writing things out by hand, or running experiments. If it's math, I'm doing derivations on paper. If it's digital design, I'm on my FPGA board testing things. Application is the mechanism where actual understanding forms.

P: Present (also, Produce or Publish)

For a long time, I mostly "presented" to myself via notes, personal journals, summaries, and lists of gotchas. That's still incredibly valuable, as you are an audience. But recently I started publishing more publicly, like this blog, and that alters the ecosystem entirely. Gaps get exposed, thinking gets sharper, feedback comes in, and naturally, you loop back to $L$.

Fortunately, running this loop is easier than ever. You can LAP with LLMs to learn faster, apply with targeted assistance, and present to refine your output in real time. No excuses.

A Rant on LLMs & Blind Production A caveat I've noticed is that most users stay stuck on one component (usually "P") blindly producing artifacts without ever circling back to the learning aspect. Look, I'm a firm believer in deep understanding, but if you're strictly optimizing for speed or some other constraint, then you do you; trade-offs matter. But with actual understanding, you're way more likely to catch the 'bugs' an LLM generates (I'm convinced LLM verification and hardware security are going to be HUGE), or come up with a novel bridge of concepts the model never even considered. And that's how you actually get ahead of the curve. There's something to be said about solo (at least initially) grind and creativity process, for the work you care about.

The So-What Principle: Embrace Errors

If you're waiting for perfect conditions to pursue a goal, you're already operating under a structurally false assumption: you're assuming zero error. Suppose you have a goal, $g$, on your to-do list. You also have constraints $x$ (such as time, dependencies, and resources) and a plan $f$. The naive, closed-system model is:

$$ g = f(x) $$

This assumes no interruptions, no unknowns, and no friction. That's not reality. When you actually implement $f$ on $x$, you don't get $g$. You get some outcome $g'$ (life happens). A more realistic model is:

$$ g' = f(x) + \varepsilon $$

Here, $\varepsilon$ (pronounced "epsilon", the statistical symbol for error) captures everything you didn't account for — external events, timing issues, hidden constraints, and random nonsense. We treat $\varepsilon$ as random, not because the universe is fundamentally random (which I think it inherently is from thought experiments I've devised — and no, you don't need knowledge of Quantum Mechanics to get this. I'll save for another blog post how to derive it), but because you do not have full information or control.

Technical Aside: The Distribution of Epsilon In statistical modeling, $\varepsilon$ is a random variable drawn from a probability distribution. Perfectionists implicitly assume $\varepsilon \sim \mathcal{N}(0, 0)$ — a distribution with zero variance, meaning absolute determinism. Reality operates on a distribution with non-zero variance $\sigma^2$. Furthermore, human execution rarely follows a neat, normal bell curve. It often exhibits a heavy-tailed distribution, meaning extreme values of $\varepsilon$ (the edge cases) are far more probable than naive planning suggests. By defining an error threshold, you are shifting from deterministic thinking to probabilistic thinking.

Most people implicitly optimize for $\varepsilon = 0$, which equates to perfect execution or nothing. If you're not starting, it's because your model demands zero error. The correct question is not "Did I hit $g$ exactly?", but rather:

$$ \text{Cost}(g, g') < \text{error\_threshold} \quad \text{(or put differently)} \quad |g - g'| < \text{threshold} $$

You define your threshold. "Cost" could be days lost, money lost, or quality drops. For example, if you plan to finish a project in 7 days ($g = 7$) and it takes 10 ($g' = 10$), the cost is 3. If your acceptable threshold was 5 days, you succeeded. Not perfectly, but successfully. You don't eliminate error; you bound it. Any plan that requires $\varepsilon = 0$ is already broken. Errors happen. Embrace them.

The Edge Cases Principle

"What's the edge case?" is one of the first questions I ask when I approach literally any problem. If you didn't think about the edge case, you didn't think. There are always multiple possible outcomes, and some are low-probability but extremely high-cost. By doing the work to identify these unlikely outcomes beforehand, you avoid despair when one actually happens. It is no longer a random failure; it was simply in the distribution, and you accepted the risk.

To identify edge cases, you must think in terms of distributions rather than single outcomes. You can roughly partition it like this:

$$ \text{Outcomes} = \text{Normal Cases} \cup \text{Edge Cases} $$

Normal cases are what you expect. (Note: I am defining "cases" here as outputs in the codomain, rather than inputs such as the constraints $x$ in the domain. It is possible to define edge cases as edge inputs, but I am treating them differently in this context.) Edge cases are the statistically significant blind spots, i.e., the outcomes that break your assumptions and carry outsized consequences. If the problem is unfamiliar, use heuristics like the Pólya move (solving a related problem to see how its system fails) or the Extremum principle as discussed in Paul Zeitz's The Art and Craft of Problem Solving (solid book!). Push the system to its boundaries by asking what happens when time approaches zero, when cost approaches infinity, or when a user does the absolute dumbest possible thing.

Most people plan exclusively for the happy path. This makes their execution inherently fragile. The true system is the happy path plus everything that breaks it. Define the edge cases early, because if you don't define them before execution, reality will define them for you at full cost.

Case Study: Debugging Procrastination Like a System

Let's stop talking abstractly. Suppose the goal is simple: publish this blog post in 7 days. Naively, $g = f(x)$ where $x$ represents time, energy, and available tools, and $f$ is the writing and editing process. But once execution starts, the real system kicks in: $g' = f(x) + \varepsilon$. Suddenly, you over-edit the introduction, spend three hours changing the title, rewrite the same paragraph ten times, and convince yourself it isn't ready.

But here is the vital distinction: that is not $\varepsilon$.

$\varepsilon$ is external noise — a power outage, getting sick, a family emergency. Procrastination is a bug inside $f(x)$ itself. It happens when your internal error-checking subroutine (perfectionism) goes into an infinite loop, starving the system of compute resources ($x$) before a return value $g'$ can ever be generated. That is not laziness; that is an unstable execution function.

To debug this, we execute a systematic patch:

This is how you escape perfectionism. You stop treating the first attempt as a final judgment of your intelligence, and you treat it like a system output. Measure it. Debug it. Run the loop again.

The Fault Tolerance Principle (Grace)

You need psychological fault tolerance. In software engineering, a robust system does not kernel panic and crash the moment it encounters an unexpected state or throws a warning. It is designed with try...catch blocks. It logs the error, safely reallocates memory, and keeps running.

When dealing with procrastination, perfectionism, and paralysis, you will inevitably throw errors. You will relapse into old habits. You will occasionally spend four hours on a trivial detail. Standard self-help calls this "giving yourself grace." In systems thinking, it is simply fault tolerance.

Do not let a localized execution failure crash the entire machine. Acknowledge the sub-optimal state, log it as data, adjust your parameters, and iterate forward. That is the whole point.

Conclusion

Now my fellow perfectionist INTPs —
kick off your shoes and relax your feet.

You've already done the hard part: thinking deeply. Now do the other hard part: act under uncertainty.

You've got this.


© 2026 Clarence Bowen. Derived, not assumed.