Bygga och sälja SaaS-tjänster via en AI-driven fabrik — för att finansiera egen AI-infrastruktur och full kontroll över våra modeller.
Lediffs process från idé till lansering
Jörgen
Idé, vision, features
Lundin + Jörgen
Business case, marknadsanalys, /products
Raffe
Acceptance criteria, design
John
Implementation, build
GH Actions
Push → PR → Auto-deploy
Janne
Testing, verification
Ping
Marketing, docs
Lundin
Released, verified
CEO / Produktägare
COO / Orkestrerare
Product Engineering Manager
Developer
QA Engineer
Infra/Ops
Design Research & UX Intelligence
Steg 1 — INNAN John kodar
Janne spawnas för att skriva testfall baserat på AC. Output: konkreta verifieringssteg per AC-punkt.
Steg 2 — EFTER merge och deploy
Janne spawnas igen för att verifiera varje AC-punkt mot live staging/prod. Output: qa:result JSON med pass/fail per steg.
Hur en idé faktiskt tar sig igenom fabriken och blir levererad kod.
Vem initierar:
Jörgen ELLER Lundin initierar en idé. Jörgen ser problem han vill lösa, marknader han vill ta, features till befintliga produkter. Lundin bevakar aktivt marknad och produkthälsa och kan initiera lika gärna. Idéer fångas i Inkorgen på /products — därifrån startar analysen.
Vad Lundin bland annat gör i ANALYS:
📐 Analysfilosofi — tumregler
🟢 Go — bygga MVP
Vi vet tillräckligt. Skapa Epic i backlog (assignee=raffe) + trigga Raffe direkt med cron run aa4ecd09.
🔵 Investigate — kör ett PoC
Det finns specifika osäkerheter som blockerar beslutet. Bygg minsta möjliga Proof of Concept för att besvara just den frågan. PoC är minimal, tidsavgränsad och målinriktad. Go efter PoC är inte automatiskt — nytt beslut tas baserat på vad PoC visade.
Lundin äger uppföljning med datum.
📦 PoC-flöde
🟡 Park — inte nu
Idén är inte fel men timing/resurser stämmer inte nu. Läggs i /products med status=parked. Jörgen och Lundin beslutar aldrig ensamma.
OUTPUT från steg 1:
Business case i /products + Beslut (🟢 Go → Epic+Raffe / 🔵 Investigate → PoC / 🟡 Park)
Vad Raffe är:
Raffe är Product Engineering Manager — inte en reaktiv spec-skrivare. Raffe väntar inte på att tasks ska ramla in. Raffe triggas av en Epic och driver planeringen proaktivt framåt.
Vad Raffe gör med en Epic:
Raffes absoluta regler:
✅ DoD — när är /plan klar?
En epic är klar med /plan och redo för ready OM OCH ENDAST OM:
🔥 LUNDIN-GODKÄNNANDE — Approval Gate
Innan tasks kan gå in i ready, måste Lundin godkänna planen:
⛔ KRITISK REGEL: Utan Lundin GO, går INGEN task in i ready.
OUTPUT från steg 2:
Lundin-godkänd plan → Konkreta tasks med acceptance-kriterier i ready — assignee=john. John kan börja koda direkt.
John kodar mot Raffes spec. Push till branch → PR → GH Actions deployer automatiskt. Janne verifierar varje acceptance-kriterium mot staging/prod.
Output: Task status = done med bevis (Docker image-datum, smoke test grön).
Ping skapar marketing-material och fortsätter trendbevakning. Lundin verifierar leverans och stänger epics.
Output: Produkt/feature live, marknadsförd, övervakad.
Regel: Du får ALDRIG rapportera "X är bruten" utan att själv ha validerat att det är sant. Vet du inte fakta, skaffar du dem.
Konkret exempel:
FEL: "Deploy fungerar inte"
RÄTT: "GH Actions build failed (se run #1234). Logs visar 'GHCR auth failing'. Root cause: GHCR_PAT utgången. Action: uppdatera secret i repo-settings. ETA 10 min."
Dessa regler är ryggraden i bolaget. Bryts de bryts fabriken.
Assignee = raffe — alltid. Aldrig direkt till John eller Janne.
Kör cron run aa4ecd09 omedelbart efter.
⛔ Polling var 10:e minut = FEL. Task skapad = Raffe triggas. Det är event-driven.
En task är KLAR när ALLA dessa är gjort. Inte innan.
✅ KLART = Produktion-redo och fungerar
Ingen task är done utan att den är testad, deployad, och verifierad att fungera i produktion. Punkt.
Varje agent har hårda gränser. Bryts de bryts hela systemet.
COO / Orkestrerare
Product Engineering Manager
Developer
QA Engineer
Fabriken är event-driven, inte polling-baserad. Crons är watchdogs för fastnade tasks, aldrig systemets hjärta.
🔑 Principer:
Triggas av Event: Epic → Backlog
Vad Raffe gör:
Raffe är ALDRIG:
Crons är systemets säkerhetsnät — de övervakar, ej styr.
| Cron | Syfte | Intervall | Åtgärd |
|---|---|---|---|
| john-work-check-2m | John hämtar nästa ready-task och arbetar | 2 min | curl ready-tasks → PATCH in_progress → koda |
| zombie-check-30m | Hitta tasks stuck in_progress >2h | 30 min | Lundin notifieras, investigerar orsak |
| raffe-trigger | Trigga Raffe när epic skapas | On-demand | sessions_send(agent:raffe:main, task:assign) — Raffe startar planering |
| velocity-report | Daglig rapport: done-tasks, velocity | 08:00 + 18:00 | POST till Jörgens DM med metrics |
⚠️ Viktigt:
Crons är inte systemets motor. De är säkerhetsnät. Systemet driven av events (PATCH status → broadcast). Om en cron slutar köra: pipelines funkar fortfarande, events funkar fortfarande, jobb görs fortfarande. Crons är backup.
En zombie-task är en task som sitter in_progress utan att röra sig framåt. Det är ett systemfel — inte en normal situation.
Detta är inte riktlinjer. Det är hur vi jobbar.
Varje regel finns här av en anledning. Bryts en regel bryts leveransen.