Skip to content

How We Work

From idea to production.


The Team

Conductor
Assigns work, tracks milestones
Dev Agent
Builds, tests, deploys
Review Agent
Reviews code independently
Monitor Agent
Watches production

Work Management

%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#e2e8f0", "primaryTextColor": "#1e293b", "primaryBorderColor": "#64748b", "lineColor": "#94a3b8", "secondaryColor": "#e2e8f0", "tertiaryColor": "#cbd5e1", "background": "#0f172a", "mainBkg": "#e2e8f0", "nodeBorder": "#64748b", "clusterBkg": "#1e293b", "clusterBorder": "#475569", "titleColor": "#e2e8f0", "edgeLabelBackground": "#1e293b", "nodeTextColor": "#1e293b"}}}%%
graph TD
    D["👤 Daniel / PM"]
    DEV["👤 CTO / Developer"]
    SLACK["Slack"]

    D -->|"creates"| F
    DEV -->|"discusses and refines"| F
    DEV -->|"plans and creates"| CLI

    D <-->|"communicates"| SLACK
    DEV <-->|"communicates"| SLACK

    subgraph Product ["Asana/ClickUp"]
        F["Features + User Stories"]
        QUEUE["Prioritized queue"]
        OTHER["UX/UI · Business · Operations"]
        F -->|"ready to build"| QUEUE
    end

    CLI["Claude Code CLI"]

    CLI -->|"reads priorities"| QUEUE
    CLI -->|"creates milestones + tasks"| GH

    subgraph Rig ["Automated Engineering Rig"]
        GH[GitHub Issues]
        AGENTS["Agents · Build · Test · Review · Human Gate · Deploy"]
        PROD[Production]
        GH --> AGENTS
        AGENTS --> PROD
    end

    PROD -->|"updates status"| F
    PROD -->|"usage data"| F
    AGENTS <-->|"communicates"| SLACK

    style D fill:#f59e0b,color:#000
    style DEV fill:#38bdf8,color:#000
    style SLACK fill:#e9a820,color:#000
    style F fill:#fbbf24,color:#000
    style QUEUE fill:#fbbf24,color:#000
    style OTHER fill:#fbbf24,color:#000
    style CLI fill:#60a5fa,color:#000
    style GH fill:#60a5fa,color:#000
    style AGENTS fill:#a78bfa,color:#000
    style PROD fill:#34d399,color:#000

Product work lives in Asana/ClickUp. Daniel creates features and user stories. When ready to build, they enter a prioritized queue.

The CTO discusses and refines features with Daniel, then uses Claude Code CLI to break them into GitHub milestones and issues with dependencies.

The rig picks up approved issues, builds, tests, reviews, and deploys them. Status flows back to Asana/ClickUp automatically.

Everyone communicates through Slack including the agents.


The Conductor

An automated coordinator that assigns work to dev agents in the right order.

%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#e2e8f0", "primaryTextColor": "#1e293b", "primaryBorderColor": "#64748b", "lineColor": "#94a3b8", "secondaryColor": "#e2e8f0", "tertiaryColor": "#cbd5e1", "background": "#0f172a", "mainBkg": "#e2e8f0", "nodeBorder": "#64748b", "clusterBkg": "#1e293b", "clusterBorder": "#475569", "titleColor": "#e2e8f0", "edgeLabelBackground": "#1e293b", "nodeTextColor": "#1e293b"}}}%%
graph TD
    MILE{"Milestones complete?"} -->|yes| NOTIFY["Notify Slack + Asana/ClickUp"]
    MILE -->|no| FIND
    NOTIFY --> FIND
    FIND["Find approved + not blocked issues"] --> ASSIGN["Assign to dev agent"]
    ASSIGN --> AGENT["Dev agent takes it all the way to production"]
    AGENT --> MILE

    style MILE fill:#fbbf24,color:#000
    style NOTIFY fill:#e9a820,color:#000
    style FIND fill:#34d399,color:#000
    style ASSIGN fill:#34d399,color:#000
    style AGENT fill:#a78bfa,color:#000

The dev agent owns the full journey of each issue: implement, build, test, review, deploy, verify. The Conductor just picks what's next.

If an agent gets stuck, the Conductor reassigns to another agent. If that fails too, it escalates to the CTO. Two strikes then human.


Example: AI Chat Widget

Four issues in one milestone. Two can start in parallel, two are blocked until the first ones are done.

%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#e2e8f0", "primaryTextColor": "#1e293b", "primaryBorderColor": "#64748b", "lineColor": "#94a3b8", "secondaryColor": "#e2e8f0", "tertiaryColor": "#cbd5e1", "background": "#0f172a", "mainBkg": "#e2e8f0", "nodeBorder": "#64748b", "clusterBkg": "#1e293b", "clusterBorder": "#475569", "titleColor": "#e2e8f0", "edgeLabelBackground": "#1e293b", "nodeTextColor": "#1e293b"}}}%%
graph LR
    A["#1 LLM tool API"] --> C["#3 Connect UI to API"]
    B["#2 Chat UI component"] --> C
    C --> D["#4 Analytics tracking"]

    style A fill:#34d399,color:#000
    style B fill:#34d399,color:#000
    style C fill:#f87171,color:#000
    style D fill:#f87171,color:#000

Green = ready to start. Red = blocked, waiting on dependencies.

%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#e2e8f0", "primaryTextColor": "#1e293b", "primaryBorderColor": "#64748b", "lineColor": "#94a3b8", "secondaryColor": "#e2e8f0", "tertiaryColor": "#cbd5e1", "background": "#0f172a", "mainBkg": "#e2e8f0", "nodeBorder": "#64748b", "clusterBkg": "#1e293b", "clusterBorder": "#475569", "titleColor": "#e2e8f0", "edgeLabelBackground": "#1e293b", "nodeTextColor": "#1e293b"}}}%%
graph TD
    subgraph Round1 ["Round 1: parallel"]
        A1["#1 LLM tool API → Agent 1"]
        A2["#2 Chat UI → Agent 2"]
    end

    subgraph Round2 ["Round 2"]
        A3["#3 Connect UI to API → Agent 1"]
    end

    subgraph Round3 ["Round 3"]
        A4["#4 Analytics → Agent 1"]
    end

    CTO["CTO approves all 4 issues"] --> Round1
    Round1 -->|"#1 and #2 done"| Round2
    Round2 -->|"#3 done"| Round3
    Round3 -->|"#4 done"| DONE["Milestone complete → Slack + Asana/ClickUp"]

    style CTO fill:#38bdf8,color:#000
    style A1 fill:#a78bfa,color:#000
    style A2 fill:#a78bfa,color:#000
    style A3 fill:#a78bfa,color:#000
    style A4 fill:#a78bfa,color:#000
    style DONE fill:#e9a820,color:#000

Each issue deploys independently. Backend goes first so the API is live before the frontend uses it. No feature flags, no coordinated releases.


Priority

When multiple issues are ready, the Conductor picks the most important one first.

%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#e2e8f0", "primaryTextColor": "#1e293b", "primaryBorderColor": "#64748b", "lineColor": "#94a3b8", "secondaryColor": "#e2e8f0", "tertiaryColor": "#cbd5e1", "background": "#0f172a", "mainBkg": "#e2e8f0", "nodeBorder": "#64748b", "clusterBkg": "#1e293b", "clusterBorder": "#475569", "titleColor": "#e2e8f0", "edgeLabelBackground": "#1e293b", "nodeTextColor": "#1e293b"}}}%%
graph LR
    P1["1. Critical (production bug)"] --> P2["2. High priority"]
    P2 --> P3["3. Normal"]
    P3 --> TIE["Same? Oldest first"]

    style P1 fill:#f87171,color:#000
    style P2 fill:#fbbf24,color:#000
    style P3 fill:#34d399,color:#000

A production bug jumps the queue. The agent handling the bug finishes it before returning to milestone work. Agents always finish their current work before picking up new work.


When things go wrong

Fix forward, not rollback. If something breaks in production, the Conductor assigns a critical fix to the next available agent.

%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#e2e8f0", "primaryTextColor": "#1e293b", "primaryBorderColor": "#64748b", "lineColor": "#94a3b8", "secondaryColor": "#e2e8f0", "tertiaryColor": "#cbd5e1", "background": "#0f172a", "mainBkg": "#e2e8f0", "nodeBorder": "#64748b", "clusterBkg": "#1e293b", "clusterBorder": "#475569", "titleColor": "#e2e8f0", "edgeLabelBackground": "#1e293b", "nodeTextColor": "#1e293b"}}}%%
graph LR
    A["Something breaks"] --> B["Agent 1 tries to fix"]
    B --> C{"Fixed?"}
    C -->|yes| D["Deploy fix"]
    C -->|no| E["Reassign to Agent 2"]
    E --> F{"Fixed?"}
    F -->|yes| D
    F -->|no| G["Escalate to CTO"]

    style A fill:#f87171,color:#000
    style B fill:#a78bfa,color:#000
    style C fill:#fbbf24,color:#000
    style D fill:#34d399,color:#000
    style E fill:#a78bfa,color:#000
    style F fill:#fbbf24,color:#000
    style G fill:#f59e0b,color:#000

Two strikes then human. Rollback is never automatic. That's always a CTO decision.


Human gates

Some changes always require a human to review before they can ship:

  • Authentication or session code
  • Payment processing
  • Database schema changes
  • Data deletion logic
  • New third-party dependencies

Everything else goes through automated review. If a human gate is waiting for more than 30 minutes, the Conductor sends a Slack reminder.


For technical details on the engineering rig, see Engineering Rig. For the event store architecture, see Event Store.