Tech Productivity

Building a Personal SOP Library: How Writing Down Repeated Tasks Actually Saved Time

The same fifteen-minute deploy-day checklist got re-figured-out from memory roughly forty times before it occurred to me to just write it down once — what actually went into the SOP library that replaced that habit.

By Aissam Ait Ahmed Tech Productivity 0 comments

The same release-day checklist — check the migration is reversible, confirm the feature flag is off by default, verify the rollback plan, notify the right channel — got mentally reconstructed from memory something like forty separate times over about a year before it occurred to me that writing it down once would have saved a meaningful amount of that reconstruction time, and would have caught the one release where a step got skipped entirely because it wasn't written anywhere and simply didn't come to mind that particular week.

What finally made the case for writing it down

The prompt wasn't a productivity article — it was a specific release where the "confirm the feature flag is off by default" step got skipped, not through carelessness but because that week was unusually chaotic and the mental checklist, reconstructed from memory under time pressure, simply came up one item short. The flag shipped enabled by default, exposed a half-finished feature to production users for about twenty minutes before anyone noticed, and the fix took ten minutes once noticed. The actual lesson wasn't "be more careful" — it was that a checklist that lives only in memory has a failure rate that a written one doesn't, especially under exactly the kind of time pressure that makes memory least reliable.

What actually went into the first SOP, and why it was short

## Release checklist (last updated: after the flag incident)

1. Is every migration in this release reversible? (check `down()` exists and is correct)
2. Are new feature flags OFF by default unless explicitly approved otherwise?
3. Is there a rollback plan written down, not just "we'll figure it out"?
4. Has the #releases channel been notified, with what's shipping and who's on call?
5. Is there a specific person confirmed as on-call for the next 2 hours post-deploy?

Five items, deliberately. The instinct when writing a first SOP is to make it exhaustive, covering every edge case that's ever come up — and the first draft of this one did exactly that, running to around twenty items, most of which were relevant to maybe one release in twenty. A checklist that long stopped actually getting read carefully within two uses; eyes glazed past it the same way memory had glazed past the flag step, just with a different failure mode. Cutting it down to the five items that mattered on nearly every release, and moving the rare edge cases into a separate "if this release also touches X, also check Y" appendix, is what made it something actually read and followed rather than skimmed.

The second SOP, and the harder lesson about scope

A second SOP, for a monthly dependency-update process, initially tried to document the full reasoning behind every dependency choice — which felt thorough and turned out to be actively counterproductive, because a document trying to be both a checklist and a reference guide serves neither purpose well under time pressure. It got split into two separate, shorter documents: a five-step checklist for the monthly update itself, and a completely separate "dependency notes" document for the reasoning, updated far less frequently and read far less often, specifically when someone needed to understand why a particular version was pinned rather than needing to just get through this month's update. Checklists and reference documentation solve different problems and want different formats; combining them produces a document that's too long to be a fast checklist and too disorganized to be a good reference.

How to decide what's actually worth writing down

  • Frequency times cost of a mistake — a task done twice a year with low stakes if slightly wrong isn't worth documenting; a task done weekly, or one where a mistake is genuinely costly even if rare (like the release checklist), clears the bar easily.
  • Whether the steps are genuinely non-obvious or just familiar — a task that feels routine because it's been done many times isn't the same as a task with no real risk of a step being missed; familiarity is exactly what makes a memory-based checklist feel safe right up until the week it isn't.
  • Whether getting it wrong produces a loud failure or a quiet one — the flag incident was caught within twenty minutes specifically because it was visible; tasks with a quiet failure mode (a config that's silently wrong, a step that just doesn't get done and nobody notices for a while) deserve a written checklist more, not less, because there's no natural safety net catching the mistake for you.

What the library looks like now

Four SOPs currently exist: the release checklist above, the dependency-update process, a new-project-setup checklist (environment variables, required accounts, initial configuration — the kind of thing forgotten just often enough to be annoying every single time a new project starts from scratch), and a client-offboarding checklist covering data export, access revocation, and final invoicing. Each is genuinely short — none run longer than roughly ten steps — stored as plain markdown files in a single folder, searchable, and each one gets a one-line "last updated" note at the top so it's obvious at a glance whether a given SOP reflects current practice or might be stale.

What keeps an SOP from going stale, since a stale checklist is its own kind of risk

An SOP that's followed but no longer accurate is arguably worse than no SOP at all, because it creates false confidence — "I followed the checklist" stops meaning "I did the right things" the moment the checklist itself falls out of date with how the actual process has changed. The habit that's kept this from becoming a real problem: any time following an SOP surfaces something outdated or missing — a step that's no longer relevant, a new step that should exist — updating the document happens immediately, in the same sitting, rather than being mentally filed as "update that later." A related discipline shows up in how I actually estimate task time now — both are cases where a small, immediate correction, made right when the gap is noticed, is far more likely to actually happen than the same correction deferred to some later, less pressured moment that in practice rarely arrives.

The actual time saved, measured honestly

This isn't precisely measurable, and it's worth resisting the temptation to overstate it with a fabricated-sounding number. What's genuinely true: the release checklist alone gets referenced on essentially every release, takes under a minute to run through, and has caught at least two other near-misses since the flag incident — a migration that wasn't actually reversible, caught before deploy rather than after, and a release that went out without on-call coverage confirmed, caught by the checklist prompting the question rather than by the gap surfacing during an actual incident. Whatever the precise time savings add up to, the more valuable change is qualitative: releases now start from a written, reviewable state rather than from whatever happened to be top of mind that particular week, which is a meaningfully different and more reliable starting point regardless of exactly how many minutes it saves on any single release.

Where this fits next to a broader weekly process

The SOP library and the weekly review process described in how I run a weekly review that actually changes what I do Monday morning serve genuinely different purposes and shouldn't be collapsed into each other — the weekly review is about deciding what to prioritize next; the SOP library is about executing recurring, already-decided tasks reliably, without re-deriving the steps from memory each time. Keeping them separate, rather than trying to build one document that does both, is the same lesson the dependency-update SOP taught directly: a document trying to serve two different purposes usually serves neither one particularly well.

Comments

Join the conversation on this article.

Comments are rendered server-side so the discussion stays visible to readers without relying on a separate widget or client-side app.

No comments yet.

Be the first visitor to add a thoughtful comment on this article.

Leave a comment

Share a useful thought, question, or response.

Be constructive, stay on topic, and avoid posting personal or sensitive information.

Back to Blog More in Tech Productivity Free Resources Explore Tools