Lär dig beprövade prompting-mönster som styr AI mot tydligare krav, modulära designval och testbar kod—så att refaktoreringar och omskrivningar minskar.

"Renare arkitektur" i det här inlägget betyder inte ett särskilt ramverk eller en perfekt diagram. Det betyder att du kan förklara systemet enkelt, ändra det utan att bryta orelaterade delar och verifiera beteende utan hjältedåd i testerna.
Tydlighet betyder att systemets syfte och form är uppenbar från en kort beskrivning: vad det gör, vem som använder det, vilken data det hanterar, och vad det absolut inte får göra. I AI-stött arbete betyder tydlighet också att modellen kan återge kraven tillbaka till dig på ett sätt du skulle skriva under.
Modularitet betyder att ansvarsområden har rena gränser. Varje modul har ett jobb, inputs/outputs och minimal kunskap om andra modulers internals. När AI genererar kod är modularitet det som hindrar att affärsregler kladdas ut över controllers, UI och dataåtkomst.
Testbarhet betyder att arkitekturen gör det billigt att "bevisa att det fungerar". Affärsregler kan testas utan ett helt körande system, och integrationstester fokuserar på några få kontrakt snarare än varje kodväg.
Omskrivningar orsakas oftast inte av "dålig kod"—de orsakas av saknade begränsningar, vag scope och dolda antaganden. Exempel:
AI kan accelerera detta felläge genom att snabbt producera övertygande output, vilket gör det enkelt att bygga vidare på osäkra grunder.
Mönstren som följer är mallar att anpassa, inte magiska prompts. Deras verkliga mål är att tvinga fram rätt konversationer tidigt: förtydliga begränsningar, jämföra alternativ, dokumentera antaganden och definiera kontrakt. Om du hoppar över det tänkandet kommer modellen glatt fylla i luckorna—och du får betala för det senare.
Du använder dem över hela leveranscykeln:
Om du använder ett vibe-coding-arbetsflöde (där systemet genereras och itereras via chat) är dessa checkpoints ännu viktigare. Till exempel i Koder.ai kan du köra en "planning mode"-loop för att låsa krav och kontrakt innan du genererar React/Go/PostgreSQL-kod, och sedan använda snapshots/rollback för att iterera säkert när antaganden ändras—utan att varje ändring blir en omskrivning.
Promptmönster är mest värdefulla när de minskar beslutsfladdrande. Tricket är att använda dem som korta, upprepbara checkpoints—innan du kodar, medan du designar och under granskning—så att AI producerar artefakter du kan återanvända, inte extra text du måste sålla igenom.
Innan kodning: kör en "alignmentsloop" för att bekräfta mål, användare, begränsningar och acceptanskriterier.
Under design: använd mönster som tvingar explicita avvägningar (t.ex. alternativ, risker, datagränser) innan du börjar implementera.
Under granskning: använd en checklista-liknande prompt för att upptäcka luckor (edge cases, övervakning, säkerhet, prestanda) medan ändringar fortfarande är billiga.
Du får bättre output med ett litet, konsekvent inputpaket:
Om du inte vet något, säg det uttryckligen och be AI:n lista antaganden.
Istället för "förklara designen", begär artefakter du kan klistra in i docs eller tickets:
Gör 10–15 minutersloopar: prompt → skumma → skärpa. Inkludera alltid acceptanskriterier (vad som måste vara sant för att designen ska vara acceptabel), och be sedan AI:n att självkontrollera mot dem. Det hindrar processen från att utvecklas till ändlösa redesign och gör nästa sektioners mönster snabba att applicera.
De flesta "arkitektur-omskrivningar" orsakas inte av dåliga diagram—de orsakas av att man byggt rätt sak för fel (eller ofullständigt) problem. När du använder en LLM tidigt, be inte om arkitektur först. Be den exponera tvetydigheter.
Använd modellen som kravintervjuare. Målet är en kort, prioriterad specifikation som du kan bekräfta innan någon designar komponenter, väljer databaser eller skriver API-kontrakt.
Här är en kopiera-klistra-mall du kan återanvända:
You are my requirements analyst. Before proposing any architecture, do this:
1) Ask 10–15 clarifying questions about missing requirements and assumptions.
- Group questions by: users, workflows, data, integrations, security/compliance, scale, operations.
2) Produce a prioritized scope list:
- Must-have
- Nice-to-have
- Explicitly out-of-scope
3) List constraints I must confirm:
- Performance (latency/throughput targets)
- Cost limits
- Security/privacy
- Compliance (e.g., SOC2, HIPAA, GDPR)
- Timeline and team size
4) End with: “Restate the final spec in exactly 10 bullets for confirmation.”
Context:
- Product idea:
- Target users:
- Success metrics:
- Existing systems (if any):
Du vill ha frågor som tvingar fram beslut (inte generiska "berätta mer"), plus en must-have-lista som faktiskt går att slutföra inom din tidslinje.
Behandla återgivningen i "10 punkter" som ett kontrakt: klistra in det i din ticket/PRD, få ett snabbt ja/nej från intressenter och först därefter gå vidare till arkitektur. Detta steg förhindrar den vanligaste orsaken till sena refaktorer: att bygga funktioner som aldrig var verkligt nödvändiga.
När du börjar med verktyg ("Ska vi använda event sourcing?") hamnar du ofta i att designa för arkitekturen istället för användaren. En snabbare väg till ren struktur är att låta AI beskriva användarresor först, i enkelt språk, och först därefter översätta dessa resor till komponenter, data och API:er.
Använd detta som utgångspunkt:
Be sedan om:
“Beskriv steg-för-steg-flödet för varje åtgärd i enkelt språk.”
“Ge en enkel tillståndsdiagrambeskrivning eller tillståndslista (t.ex. Draft → Submitted → Approved → Archived).”
“Lista icke-happy-path-scenarier: timeouts, retries, duplicerade förfrågningar, avbokningar och ogiltiga inputs.”
När flödena är tydliga kan du be AI:n mappa dem till tekniska val:
Bara efter det bör du be om en arkitekturskiss (tjänster/moduler, gränser och ansvar) knuten direkt till flödesstegen.
Avsluta med att låta AI:n konvertera varje resa till acceptanskriterier du faktiskt kan testa:
Detta mönster minskar omskrivningar eftersom arkitekturen växer ur användarbeteende—inte ur antaganden om teknik.
De flesta arkitekturarbeten omarbetas inte på grund av "dålig design"—de beror på dolda antaganden som visar sig vara falska. När du ber en LLM om arkitektur kommer den ofta att fylla i luckor med plausibla gissningar. En antagandelogg gör dessa gissningar synliga tidigt, när förändringar är billiga.
Målet är att tvinga fram en ren separation mellan fakta du gav och antaganden den uppfann.
Använd denna prompt:
Template prompt “Before proposing any solution: list your assumptions. Mark each as validated (explicitly stated by me) or unknown (you inferred it). For each unknown assumption, propose a fast way to validate it (question to ask, metric to check, or quick experiment). Then design based only on validated assumptions, and call out where unknowns could change the design.”
Håll det kort så folk faktiskt använder det:
Lägg till en rad som får modellen att ange sina brytpunkter:
Detta mönster förvandlar arkitektur till en uppsättning villkorade beslut. Du får inte bara ett diagram—du får en karta över vad som måste bekräftas innan du binder dig.
AI-verktyg är bra på att producera en enskild "bäst" design—men det är ofta bara det första rimliga alternativet. En renare arkitektur framträder ofta när du tvingar fram en jämförelse tidigt, medan förändringar fortfarande är billiga.
Använd en prompt som kräver flera arkitekturer och en strukturerad avvägningstabell:
Propose 2–3 viable architectures for this project.
Compare them in a table with criteria: complexity, reliability, time-to-ship, scalability, cost.
Then recommend one option for our constraints and explain why it wins.
Finally, list “what we are NOT building” in this iteration to keep scope stable.
Context:
- Users and key journeys:
- Constraints (team size, deadlines, budget, compliance):
- Expected load and growth:
- Current systems we must integrate with:
En jämförelse tvingar modellen (och dig) att yta upp dolda antaganden: var tillstånd bor, hur tjänster kommunicerar, vad som måste vara synkront och vad som kan fördröjas.
Kriterietabellen är viktig eftersom den stoppar debatter som "microservices vs monolith" från att bli åsiktsdrivna. Den förankrar beslutet i vad ni faktiskt bryr er om—att leverera snabbt, minska driftkostnad eller förbättra tillförlitlighet.
Acceptera inte "det beror på." Be om en tydlig rekommendation och specifika begränsningar den optimerar för.
Insistera också på "vad vi inte bygger." Exempel: "Ingen multi-region failover", "Ingen plugin-arkitektur", "Inga realtidsnotiser." Det håller arkitekturen från att tyst expandera till att stödja funktioner ni inte förbundit er till—och förhindrar överraskande omskrivningar senare.
De flesta omskrivningar sker för att gränser var vaga: allt "rör allt", och en liten ändring sprider sig i kodbasen. Detta mönster använder prompts som tvingar fram tydligt modulägande innan någon börjar debattera ramverk eller klassdiagram.
Be AI:n definiera moduler och ansvar, plus vad uttryckligen inte hör hemma i varje modul. Begär sedan gränssnitt (inputs/outputs) och beroenderegler, inte en byggplan eller implementeringsdetaljer.
Använd detta när du skissar en ny funktion eller refaktoriserar ett rörigt område:
Lista moduler med:
För varje modul, definiera endast gränssnitt:
Dependency rules:
Future change test: Given these likely changes: <list 3>, show which single module should absorb each change and why.
Målet är moduler du kan beskriva för en kollega på under en minut. Om AI:n föreslår en "Utils"-modul eller lägger affärsregler i controllers, tryck tillbaka: "Flytta beslutsfattande till en domänmodul och håll adapters tunna."
När du är klar har du gränser som överlever nya krav—eftersom förändringar har ett klart hem och beroenderegler hindrar oavsiktlig koppling.
Integrationsomarbete orsakas ofta inte av "dålig kod"—det orsakas av oklara kontrakt. Om datamodellen och API-formerna bestäms sent fyller varje team (eller modul) i luckor olika, och du spenderar nästa sprint på att försona mismatchande antaganden.
Börja med att prompta för kontrakt innan du pratar ramverk, databaser eller mikrotjänster. Ett tydligt kontrakt blir den gemensamma referensen som håller UI, backend och datapipelines synkade.
Använd detta tidiga prompt med din AI-assistent:
Följ sedan direkt upp med:
Du vill ha konkreta artefakter, inte prosa. Till exempel:
Subscription
Och en API-skiss:
POST /v1/subscriptions
{
"customer_id": "cus_123",
"plan_id": "pro_monthly",
"start_date": "2026-01-01"
}
201 Created
{
"id": "sub_456",
"status": "active",
"current_period_end": "2026-02-01"
}
422 Unprocessable Entity
{
"error": {
"code": "VALIDATION_ERROR",
"message": "start_date must be today or later",
"fields": {"start_date": "in_past"}
}
}
Låt AI:n ange regler som: "Lägg till fält utan versionshöjning; byten av namn kräver /v2; klienter ska ignorera okända fält." Detta steg förhindrar tysta breaker-ändringar—och de omskrivningar som följer.
Arkitekturer skrivs om när "happy path" möter verklig trafik, ostadiga beroenden och oväntat användarbeteende. Detta mönster gör tillförlitlighet till ett explicit designresultat, inte en efterhandskonstruktion.
Använd detta med din valda arkitekturbeskrivning:
List failure modes; propose mitigations; define observability signals.
För varje failure mode:
- What triggers it?
- User impact (vad användaren upplever)
- Mitigation (design + operational)
- Retries, idempotency, rate limits, timeouts-överväganden
- Observability: logs/metrics/traces + larmtrösklar
Fokusera på de gränssnitt som kan misslyckas: externa API:er, databas, köer, auth-leverantör och bakgrundsjobb. Kräv sedan konkreta beslut:
Avsluta prompten med: "Returnera en enkel checklista vi kan granska på 2 minuter." En bra checklista innehåller punkter som: beroendetidouter satta, begränsade retries, idempotens för skapa/charge-aktioner, backpressure/rate limiting på plats, definierad graceful degradation-path.
Begär events kring användarmoment (inte bara systeminternals): "user_signed_up", "checkout_submitted", "payment_confirmed", "report_generated". För varje event, be om:
Detta gör tillförlitlighet till ett designartefakt du kan validera innan kod finns.
Ett vanligt sätt som AI-stött design skapar omskrivningar är genom att uppmuntra till "kompletta" arkitekturer för tidigt. Åtgärden är enkel: tvinga planen att börja med den minsta användbara skivan—en som levererar värde, provar designen och håller framtida alternativ öppna.
Använd detta när lösningen växer snabbare än kraven:
Template: “Propose the smallest usable slice; define success metrics; list follow-ups.”
Be modellen svara med:
Lägg till: "Ge en fasad roadmap: MVP → v1 → v2, och förklara vilken risk varje fas reducerar." Detta håller senare idéer synliga utan att tvinga in dem i första releasen.
Exempelutfall du vill ha:
Den mest kraftfulla raden i detta mönster är: "Lista vad som uttryckligen är out-of-scope för MVP." Exklusioner skyddar arkitekturval från för tidig komplexitet.
Bra exklusioner ser ut som:
Avsluta med: "Konvertera MVP till tickets, var och en med acceptanskriterier och beroenden." Det tvingar klarhet och avslöjar dold koppling.
En solid ticketuppdelning brukar inkludera:
Om du vill, låt modellen outputa i ditt teams format (t.ex. Jira-fält) och håll senare faser i en separat backlog.
Ett enkelt sätt att stoppa arkitektur från att driva iväg är att tvinga klarhet genom tester före du ber om en design. När du promptar en LLM att börja med acceptanstester måste den namnge beteenden, inputs, outputs och edge cases. Det blottlägger saknade krav och pressar implementeringen mot rena modulgränser.
Använd detta som en "port"-prompt när du ska designa en komponent:
Följ upp med: "Gruppera testerna efter modulansvar (API-lagret, domänlogik, persistens, externa integrationer). För varje grupp, specificera vad som mockas och vad som är verkligt."
Detta förflyttar LLM:n bort från intrasslade designer där allt rör allt. Om den inte kan förklara var integrationstester börjar, är din arkitektur förmodligen inte tillräckligt klar än.
Begär: "Föreslå en testdatastrategi: fixtures vs factories, hur man genererar edge cases, och hur man håller tester deterministiska. Lista vilka beroenden som kan använda in-memory-fakes och vilka som behöver en riktig tjänst i CI."
Du kommer ofta upptäcka att en "enkel" funktion faktiskt behöver ett kontrakt, en seed-dataset eller stabila ID:n—bättre att hitta det nu än under en omskrivning.
Avsluta med en lättviktig checklista:
Designgranskningar ska inte bara ske efter att kod finns. Med AI kan du köra en "pre-mortem review" på din arkitekturskiss (även om det bara är några stycken och ett diagram-i-ord) och få en konkret lista med svagheter innan de blir omskrivningar.
Börja med en ärlig granskar-roll och tvinga fram konkretion:
Prompt: “Act as a reviewer; list risks, inconsistencies, and missing details in this design. Be concrete. If you can’t evaluate something, say what information is missing.”
Klistra in din designsammanfattning, begränsningar (budget, tidslinje, teamets kompetens) och icke-funktionella krav (latens, tillgänglighet, compliance).
Granskningar misslyckas när feedback är vag. Be om en rankad uppsättning fixes:
Prompt: “Give me a prioritized punch list. For each item: severity (Blocker/High/Medium/Low), why it matters, suggested fix, and the smallest validation step.”
Detta ger en beslutsfärdig uppsättning uppgifter istället för en debatt.
En användbar forcing-funktion är en enkel poäng:
Prompt: “Assign a rewrite risk score from 1–10. Explain the top 3 drivers. What would reduce the score by 2 points with minimal effort?”
Du jagar inte precision; du yttar fram de mest omskrivningsbenägna antagandena.
Slutligen, förhindra att granskningen expanderar scope:
Prompt: “Provide a diff plan: minimal changes needed to reach the target design. List what stays the same, what changes, and any breaking impacts.”
När du upprepar detta mönster i varje iteration utvecklas arkitekturen genom små, reversibla steg—medan stora problem fångas tidigt.
Använd detta pack som ett lättviktigt arbetsflöde du kan upprepa för varje feature. Idén är att kedja prompts så att varje steg producerar ett artefakt nästa steg kan återanvända—vilket minskar "borttappad kontext" och överraskande omskrivningar.
I praktiken implementerar team ofta denna kedja som en upprepbar "feature recipe". Om du bygger med Koder.ai mappar samma struktur rent till ett chattdrivet bygge: fånga artefakterna på ett ställe, generera första fungerande skivan och iterera med snapshots så experiment är reversibla. När MVP är klar kan du exportera källkod eller distribuera/hosta med en egen domän—användbart när du vill ha snabbhet i AI-assisterad leverans utan att låsa dig till en miljö.
SYSTEM (optional)
You are a software architecture assistant. Be practical and concise.
Guardrail: When you make a recommendation, cite the specific lines from *my input* you relied on by quoting them verbatim under “Input citations”. Do not cite external sources or general industry claims.
If something is unknown, ask targeted questions.
1) REQUIREMENTS CLARIFIER
Context: <product/system overview>
Feature: <feature name>
My notes: <paste bullets, tickets, constraints>
Task:
- Produce: (a) clarified requirements, (b) non-goals, (c) constraints, (d) open questions.
- Include “Input citations” quoting the exact parts of my notes you used.
2) ARCHITECTURE OPTIONS
Using the clarified requirements above, propose 3 architecture options.
For each: tradeoffs, complexity, risks, and when to choose it.
End with a recommendation + “Input citations”.
3) MODULAR BOUNDARIES
Chosen option: <option name>
Define modules/components and their responsibilities.
- What each module owns (and does NOT own)
- Key interfaces between modules
- “Input citations”
4) DATA & API CONTRACTS
For each interface, define a contract:
- Request/response schema (or events)
- Validation rules
- Versioning strategy
- Error shapes
- “Input citations”
5) TEST-FIRST ACCEPTANCE
Write:
- Acceptance criteria (Given/When/Then)
- 5–10 critical tests (unit/integration)
- What to mock vs not mock
- “Input citations”
6) RELIABILITY + DESIGN REVIEW
Create:
- Failure modes list (timeouts, partial failure, bad data, retries)
- Observability plan (logs/metrics/traces)
- Review checklist tailored to this feature
- “Input citations”
Om du vill ha en djupare följeslagare, se prompting-for-code-reviews. Om du utvärderar verktyg eller teamrullout är pricing ett praktiskt nästa steg.
"Renare arkitektur" här betyder att du kan:
I AI-stött arbete betyder det också att modellen kan återge kraven tillbaka till dig på ett sätt du skulle godkänna.
AI kan snabbt producera övertygande kod och design, vilket gör det enkelt att bygga ovanpå saknade begränsningar och dolda antaganden. Denna hastighet kan förstärka triggers för omskrivningar, som till exempel:
Lösningen är inte "mindre AI" utan att använda prompts som tvingar fram begränsningar, kontrakt och antaganden tidigt.
Använd mönstren som korta checkpoints som producerar återanvändbara artefakter (inte extra prosa):
Håll iterationerna till : prompt → skumma → skärpa → självkontroll mot acceptanskriterier.
Ta med ett litet, konsekvent paket:
Om något är okänt, säg det och be modellen explicit istället för att gissa tyst.
Begär artefakter du kan klistra in i dokument, biljetter och PRs:
Detta håller AI-output handlingsbar och minskar omskrivningar orsakade av "borttappad kontext."
Använd modellen som kravintervjuare. Låt den:
Börja med roller och handlingar, be sedan om:
Först när flödena är klara, mappa dem till beslut som var validering slutar och affärslogik börjar, var idempotens krävs och vad som måste lagras kontra härledas. Konvertera sedan flöden till testbara Given/When/Then-acceptanskriterier.
Eftersom LLM:er fyller luckor med rimliga gissningar om du inte separerar:
Be om en antagandelogg som markerar varje post som validerad eller okänd, plus:
Tvinga modellen att föreslå 2–3 genomförbara arkitekturer och jämför dem i en tabell (komplexitet, tillförlitlighet, tid-till-release, skalbarhet, kostnad). Kräv sedan:
Detta hindrar det första rimliga alternativet från att bli standard och minskar tyst scope-expansion (en vanlig orsak till omskrivningar).
Ett kontraktsförst-tillvägagångssätt minskar integrationsarbete genom att göra dataformer och kompatibilitetsregler explicita. Be om:
När UI, backend och integrationer delar samma kontraktsartefakt minskar tiden som läggs på att försona olika antaganden.
Behandla de 10 punkterna som kontrakt som du validerar med intressenter innan designen startar.
Be också modellen lista "vad skulle ändra ditt svar?"-triggers (t.ex. volym, latens, compliance, retention) för att göra designen villkorlig och mindre omskrivningsbenägen.