← Back to home

Building an operating system for a team of one

I adapted the operating-system patterns I used with product teams to a solo practice, then built the tool that runs them and tested the framework against itself.

Designer, builder, and sole operator Independent Work Jun 2026–present Operating model design
3 days framework to running tool written June 4 and running against a live backend by June 7
6 stages plus two designed exits one vocabulary across content, code, skills, and consulting work
3 composable gate sets content, technical, and agent safety gates applied by work type
1 week to first real catch accessibility issues in its own dashboard

The problem

I had spent years building operating systems for product teams: planning cadences, lifecycle frameworks, knowledge systems, and the tooling around them.

Then I started running my own studio and lost all the scaffolding those systems quietly rely on.

The work included a website, blog posts, portfolio pieces, product listings, code, Claude skills, and eventually consulting work. Those things do not share a definition of done, but they were all competing for the same limited attention. The result was predictable: too many half-finished things, too much time deciding what to work on next, and a strong tendency for the newest idea to beat the thing that was already close to shipping.

A solo operating model also has an adoption problem that an organizational one does not. In a company, somebody is usually waiting on the other side of a gate. Alone, every gate is optional. I was the process designer, the user, and the person with complete authority to decide the process was annoying and quietly ignore it.

So I could not design for compliance. The system had to cost less attention than the friction it removed.

Designing one lifecycle for different kinds of work

I started with one shared vocabulary.

The lifecycle has six stages: Captured, Shaped, Drafting, Reviewing, Refining, and Shipped. Two additional states, Parked and Dropped, sit outside the main line as designed exits rather than failed work. A blog post, website page, Claude skill, piece of code, and consulting deliverable can all move through those same stages even though the work inside them looks different.

The most useful stage turned out to be Shaped. That is where an idea gets an audience, scope, definition of done, and enough thinking to decide whether it deserves a drafting session. It gives bad ideas somewhere cheap to die before I spend an evening making them look respectable.

Parked and Dropped both require a written reason. There is nobody auditing those decisions, but requiring a reason keeps the backlog from becoming a graveyard of things I technically still intend to do someday. Giving work a deliberate way out keeps the list honest enough that I still want to open it.

The six-stage pipeline and its two exits Six stages run left to right: Captured, Shaped, Drafting, Reviewing, Refining, Shipped. Two further states, Parked and Dropped, sit below the line and are reachable from any stage. Each exit requires a written reason. THE PIPELINE One lifecycle for very different work. The stages stay the same across work types; what happens inside them changes. Captured Shaped Drafting Reviewing Refining Shipped Shaped is for thinking before making. Bad ideas are cheaper to stop here. Agents handle repeatable checks here. Post-ship work starts as a new item. from any stage Parked Dropped Parked and Dropped both require a reason. Designed exits keep the backlog usable.
The six stages, with Parked and Dropped as designed exits rather than failures. Each exit requires a written reason.

Making the human and AI boundary explicit

Claude is part of how I work, both interactively and through bounded autonomous agents. That made authorship and authority separate design questions.

Every lifecycle stage has a default working mode

  • Solo is where the judgment needs to remain mine.
  • Collaborative is me working with Claude in conversation.
  • Autonomous is an agent executing a defined task inside explicit guardrails.

Capture stays Solo because the ideas are mine. Shaping and drafting are usually collaborative, while Reviewing is where autonomous agents are most useful because the checks are systematic and repeatable. Refining comes back to collaboration because deciding whether something actually feels right is still judgment.

For autonomous work, I also separated review from execution. An agent can identify an issue and propose a fix, but it does not apply that fix and then evaluate its own work. I make the next decision after I can see what it found and why.

Operating modes mapped across the six stages A matrix with three rows for the Solo, Collaborative and Autonomous working modes and six columns for the stages. Filled cells mark the default mode for a stage. Capture is solo only. Reviewing defaults to autonomous. Four agent guardrails are listed below. OPERATING MODES Who leads is decided by stage. The matrix shows the default working mode for each stage and where autonomous work is allowed. Mode Captured Shaped Drafting Reviewing Refining Shipped Solo Me alone DEFAULT · · · · · Collaborative Me with Claude · DEFAULT DEFAULT permitted DEFAULT DEFAULT Autonomous Agent, bounded not permitted inputs only permitted DEFAULT fixes only prep only Captured stays Solo. Reviewing defaults to Autonomous. Refining and Shipped return to collaborative work. AGENT GUARDRAILS Defined scope Structured pass / flag / fail output Stops at its boundary No chained decisions Agents can flag issues and propose fixes, but review and execution happen in separate passes.
Default working mode by stage, plus the guardrails for autonomous work.

Gates that compose across the work

The obvious approach would have been a different process for every deliverable type. That would also have given me seven processes to maintain, which sounds like an excellent way to spend all my time maintaining the system instead of doing anything in it.

Instead, I built three reusable gate sets

  • Content gates cover voice, value, pillar fit, audience, brand alignment, and structure.
  • Technical gates cover functionality, error handling, dependencies, security, code quality, performance, and accessibility.
  • Agent safety gates cover scope adherence, stopping behavior, edge-case handling, and traceability.

Work pulls from those sets based on what it actually is. A blog post only needs content gates, a React component needs technical gates, a website page needs both, and agent work adds agent-safety checks. That lets me change a gate once without maintaining a separate version of the process for every deliverable type.

Three gate sets that compose per deliverable type Three cards list the content gates, technical gates and agent safety gates. Below, four deliverable types show which gate sets each one pulls: a blog post pulls content, a React component pulls technical, a website page pulls both, and a Claude agent pulls technical plus agent safety. QUALITY GATES Gate sets are assigned by work type. Each work type uses the gate sets that apply to it. CONTENT GATES Voice Value Pillar fit Audience Brand alignment Structure TECHNICAL GATES Functionality Error handling Dependencies Security Code quality Performance Accessibility AGENT SAFETY GATES Scope adherence Stopping behavior Edge case handling Traceability WHAT EACH TYPE PULLS Blog post content React component technical Website page content technical Claude agent technical agent safety N/A is recorded when a gate does not apply.
Three gate sets that compose per deliverable type, instead of a separate process for each of the seven types.

Turning the framework into a tool

I knew I was not going to keep checking a process document every time I sat down to work, so I built the tool that runs it. I wrote the framework on June 4, 2026, and by June 7 it was a password-protected React interface backed by Netlify Blobs, with local storage acting as a cache.

Inside the tool, stages became columns and each work item carried its type, pillar, next action, and last-touched date. Gate checklists were assembled from the item type and current stage, and an item could not advance until its applicable gates had been answered.

A daily log recorded what moved and whether the work was mine or an agent’s. The interface also surfaced the item closest to shipping, which means I do not have to reconstruct the state of everything before deciding where to start.

The written framework mapped to the running dashboard Two panels side by side. The left panel, dated June 4, lists four elements of the written framework. The right panel, dated June 7, lists the matching features of the built dashboard. Amber arrows connect each pair. FROM DOCUMENT TO INSTRUMENT Written June 4. Running June 7. The dashboard implemented the same stages, gates, session rule, and work attribution defined in the framework. THE DOCUMENT Written June 4 THE INSTRUMENT Running June 7 Six stages, two exits Stage columns, synced to a live backend Gate checklists per stage Tri-state checklists that block advancing Session rule: start with the item closest to Shipped A nudge that names the item closest to shipping Three operating modes A daily log separating my work from agent work Three days after launch, the accessibility gate found dashboard contrast issues, which I fixed.
The written framework and its implementation three days later.

Designing for adoption

The framework was only useful if I kept using it. That meant designing around the predictable behavior of its only user.

The gate checklist makes not applicable a legitimate, recorded state. An irrelevant gate does not need to be quietly treated as passed just to make the checklist go away. Making the honest answer available matters more than making the checklist look complete.

The working cadence is intentionally modest: one 30 to 60 minute weekly session, a 15 minute monthly check, and a quarterly review of the framework itself. There are no publishing quotas. Progress is measured by work moving through the lifecycle, not by promising myself that Future Katerina will apparently become a content factory.

The weekly session starts with the item closest to Shipped. New ideas can still arrive, because realistically I was never going to design that behavior out of myself, but they go into Captured instead of immediately hijacking the session.

And the framework only gets redesigned during the quarterly review. Otherwise every bit of friction becomes an exciting opportunity to improve the process, which is suspiciously convenient when the alternative is finishing the thing already sitting in Reviewing.

Recreation of a work item with its quality gates open The Services page item sits in the Reviewing stage with a counter reading ten of eleven gates passed and one not applicable. Six content gates and five technical gates are listed. Five content gates are passed, the structural check is still open, and the cross-browser check is marked not applicable. The Advance button is disabled with the tooltip: pass all gates first. GATES IN USE One open gate blocks advancement. This website page uses content and technical gates, with N/A recorded for checks that do not apply. Services page Reviewing Website Page Meta / Operations 10/11 · 1 n/a NEXT ACTION Run the structural check on the offers section, then move to Refining. CONTENT Voice check: sounds like Katerina Value check: gives something useful Pillar check: belongs to identified pillar Audience check: they'd recognize themselves Brand alignment: reflects a core value Structural check: logical, earns attention, useful close TECHNICAL Security review Code quality Performance check Accessibility: WCAG AA Cross-browser check N/A ← Back Advance → Pass all gates first The item stays in Reviewing until every applicable gate is answered.
A Reviewing-stage website page with content and technical gates applied.

Testing the system against itself

Three days after the pipeline went live, I ran the technical gates against the dashboard itself. The accessibility gate found contrast violations, and the brand-alignment gate found visual inconsistencies against my own design system. I fixed both.

That was the first time the framework caught something I might otherwise have left in a shipped tool, which was much more useful evidence than another clean pass. If every check comes back green forever, I do not actually know whether the gate is doing anything.

Extending without forking

Later, I needed a version of the process for portfolio case studies built from professional work. The constraint was confidentiality: I did not want employer files, screenshots, or exports moving onto a personal machine. I could have created a separate workflow for that work, but the existing structure was flexible enough to extend.

I added case-study-specific stages and a mockup approval gate. Before any final visual is built, I review a low-fidelity version containing the exact intended labels. Approval happens per visual, and silence does not count.

The final visuals are recreated from written descriptions rather than source material, so de-branding is part of the workflow from the beginning instead of something I have to clean up afterward. That let me add stricter controls for one kind of work without changing the core lifecycle or maintaining a second operating system.

What changed

One vocabulary became enough for very different work

The six lifecycle states now give me a consistent way to describe where work is, even when the deliverables themselves have little in common.

The distinction between Shaped and Drafting has been especially durable. Knowing which side of that line an item sits on tells me whether the next session requires thinking or making.

The framework became operational in three days

The written model went from document to running tool between June 4 and June 7.

That let the operating rules live in the interface instead of relying on me to remember them.

The quality gates found actual defects

Within the first week, the framework surfaced accessibility and visual-consistency problems in its own dashboard.

That was the first useful evidence that the gates were capable of producing signal rather than simply documenting intent.

The system supported later work

The lifecycle has since been used for this site, portfolio work, services content, case studies, and a personal Daily Brief application.

The Daily Brief moved from a Friday-evening specification to a live application pulling calendar data by Saturday morning. Its scope and definition of done had already been established in Shaped before implementation began.

Reflections

Some parts of the original framework have earned their place more clearly than others.

The stage vocabulary, designed exits, and composable gates are still useful every time I work. A few gates I wrote with great conviction have never caught anything. I have left them in place until the next quarterly review rather than changing the model reactively. If they continue to produce no useful signal, they should probably come out.

The human and AI boundary has also held up. The most useful rule is still separating review from execution. An autonomous agent can flag an issue and propose a fix, but the next decision does not automatically belong to the same agent that made the change.

And the weekly cadence has survived largely because starting it is cheap. I do not open the system and immediately face a blank question about what I should do with my life. The tool already knows which item is closest to shipping.

The project started as a way to bring the operating-system work I had done with teams down to a scale of one.

At that scale, there is nowhere for unnecessary ceremony to hide. If a rule makes the work easier to understand, finish, or evaluate, it stays. If it only makes the process look more complete, eventually it has to earn its way back out.

operating-systemsprocess-designsolo-operationshuman-ai-collaborationquality-gatesadoption-design

Want to talk about this work?

Get in touch