Communitygithub.com

lguidolin/디자인-후-개발

새로운 기능을 시작하거나, 단순하지 않은 버그를 수정하거나, 구현 코드를 작성하기 전에 사용합니다. '간단하니까 바로 코딩하면 돼'라는 생각, 디자인 승인 없이 에디터를 열거나, 아이디어를 구체적인 명세와 계획으로 만들지 않은 상태에서 사용하는 증상이 있을 때 적용합니다.

디자인-후-개발란 무엇인가요?

이 스킬은 개발 프로세스에서 '디자인 후 개발' 원칙을 강제하여 불필요한 재작업과 가정에 의한 오류를 방지합니다. 총 5단계(브레인스토밍 → 명세 → 계획 → 실행 → 기록)로 구성되며, 구현은 반드시 명확한 디자인 승인 이후에만 진행됩니다. Claude Code, Cursor, Codex 등 다양한 AI 에이전트 플랫폼에서 사용할 수 있으며, 작업이 진정으로 사소하고 되돌릴 수 있는 경우(예: 오타 수정, 로그 한 줄, 설정 값 변경)에만 실행 단계로 바로 넘어갈 수 있습니다. 이 스킬은 사용자가 흔히 하는 합리화(너무 간단해서 디자인 불필요, 코딩하면서 디자인, 사용자 요청이 곧 디자인 등)를 차단하고, 체계적인 설계 과정을 통해 개발 효율성과 코드 품질을 높입니다. 대규모 작업의 경우 여러 하위 시스템으로 분해하여 각각 독립적인 사이클을 따르도록 안내합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/lguidolin/agent-skills/tree/main/skills/designing-before-building

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

설계 후 구축하기

개요

작업 흐름은 순서대로 브레인스토밍 → 명세 → 계획 → 실행 → 기록의 다섯 단계를 거칩니다. 설계가 명확히 표현되고 승인되기 전에는 구현이 시작되지 않습니다. 가장 간단한 작업일수록 검증되지 않은 가정이 가장 큰 비용을 초래합니다.

이 규칙의 글자를 위반하는 것은 그 정신을 위반하는 것입니다. "코딩하면서 설계하겠다"는 설계가 아닙니다.

다섯 단계

  1. 브레인스토밍. 의도, 제약 조건, 성공 기준을 탐구합니다. 한 번에 하나의 질문을 던집니다. 장단점과 권장 사항이 포함된 2~3가지 접근 방식을 제안합니다. 설계에 수렴하고 명시적 승인을 받습니다. 여기서는 코드를 작성하지 않습니다.
  2. 명세. 승인된 설계를 날짜가 포함된 문서에 작성합니다. 명세는 구축될 내용에 대한 계약입니다.
  3. 계획. 명세를 코드에 손대기 전에 순서가 지정된 검토 가능한 구현 계획으로 분해합니다.
  4. 실행. 검토 체크포인트와 함께 계획에 따라 구현합니다.
  5. 기록. 구축된 내용과 그 이유를 결정 기록( recording-decisions 참조)에 추려서 기록합니다.

대규모 작업은 분해하세요. 요청이 여러 독립적인 하위 시스템에 걸쳐 있는 경우 세부 사항을 구체화하기 전에 멈추고 분해하세요. 각 하위 프로젝트는 자체 주기로 실행되며, 종속성 순서대로 구축됩니다.

사용하지 말아야 할 경우

진정으로 사소하고 되돌릴 수 있는 편집(오타, 로그 라인, 구성 값)은 실행 단계로 바로 건너뜁니다. 기준: 여기서 잘못된 추측이 설계 단계보다 더 많은 비용을 초래할까? 그렇다면 먼저 설계하세요.

일반적인 합리화

변명현실
"이건 설계가 필요 없을 정도로 간단해"간단한 작업은 가정을 숨깁니다. 몇 문장의 설계는 저렴하지만, 재작성은 그렇지 않습니다.
"진행하면서 설계하겠어"설계가 확정되기 전에 작성된 코드는 다시 작성되는 코드입니다. 설계는 별개의 행위입니다.
"사용자가 무엇을 구축하라고 알려줬는데, 그게 바로 설계야"요청은 무엇을 할지 말할 뿐 어떻게 할지는 말하지 않습니다. 어떻게 하는 것이 설계입니다.
"코드베이스를 먼저 탐색하면 접근 방식을 알 수 있을 거야"탐색은 설계에 정보를 제공하지만, 하나의 승인을 대체하지는 않습니다.
"우린 서두르고 있어"서두를 때야말로 건너뛴 설계가 일회용 작업을 만들어내는 때입니다.

위험 신호 — 중지

  • 승인된 설계 없이 편집기를 여는 경우
  • "잠깐 프로토타입만 만들어 볼게" (명세가 없는 프로토타입은 검토되지 않은 범위입니다)
  • 계획 없이 여러 파일 변경을 시작하는 경우
  • 사용자의 한 줄 요청을 완성된 명세로 취급하는 경우

이 모든 것은 다음을 의미합니다: 멈추고, 설계하고, 승인을 받은 후 구축하세요.

전체 근거: engineering-constitution/references/engineering-constitution.md에 번들된 헌법 제1조.

Individual skills in this repo

This repo contains 18 individual skills — each has its own dedicated page.

lguidolin/change-hygiene-and-code-craft

Use when writing or refactoring code, structuring a commit or PR, or deciding whether to abstract duplication. Symptoms — mixing reorg with logic changes, a PR doing several things at once, a file growing large, the second copy of similar code, or unsure whether to DRY something up.

lguidolin/cloud-delivery-aks

Use when deploying to Kubernetes or Azure Kubernetes Service (AKS), configuring cloud secrets, setting up progressive rollout/canary, per-PR ephemeral environments, or k8s health probes. Keywords — Kubernetes, AKS, Key Vault, Argo Rollouts, Flagger, canary, blue-green, liveness, readiness, PodDisruptionBudget, HPA, rollback, GHCR.

lguidolin/commit-history-rewrite

Use when an existing repository has messy commit history that needs to conform to conventional commits before adopting release-please, or when intermediate WIP/fixup/merge commits need to be cleaned up.

lguidolin/conventional-commits-and-releases

Use when committing, writing a commit message, opening a PR that will be squash-merged, or configuring automated versioning/changelogs. Keywords — conventional commits, release-please, semver, feat/fix/chore, breaking change, changelog.

lguidolin/defense-in-depth-security

Use when handling untrusted input, secrets, authentication/authorization, or dependencies — or threat-modeling a new surface. Keywords — STRIDE, threat model, least privilege, secrets management, supply chain, dependency scanning, input validation, audit log, defense in depth.

lguidolin/engineering-constitution

Use when starting work in a project that follows the engineering constitution, orienting to its rules, or deciding which engineering practice applies to a task — spec writing, commits, testing, security, deploys, database, or UI work.

lguidolin/graphql-contract-testing

Use when writing a GraphQL query/mutation that the UI and a test will share, or building route/schema contract or smoke tests. Symptoms — copying a query into a test, a test asserting on query text, schema change that didn't break the UI build, or RLS/permission drift. Keywords — graphql-codegen, typed document, contract test, route smoke test.

lguidolin/init-repo-CI

Use when setting up a new repository with conventional commits, release-please, and CI automation, or when retrofitting an existing repository that lacks automated versioning and PR validation workflows.

lguidolin/interface-craft-and-accessibility

Use when building or styling UI — components, layouts, forms, design tokens — or making accessibility decisions. Keywords — a11y, WCAG, keyboard navigation, focus state, contrast, design system, minimalist UI, component reuse, ARIA, semantic HTML.

lguidolin/merge-gates-and-automation

Use when setting up or changing CI, pre-push hooks, or a task runner, or deciding what must pass before merge. Symptoms — tempted to put authoritative checks only in a local hook, skip CI, bypass with --no-verify, or unsure what gates a merge vs. runs locally.

lguidolin/observability-and-slos

Use when adding logging, metrics, tracing, health checks, SLOs, or alerting — or when building a service surface that needs to be operable and debuggable. Keywords — structured logs, OpenTelemetry, correlation id, RED metrics, liveness, readiness, SLI, SLO, error budget, alerting.

lguidolin/performance-and-scale

Use when working on hot paths, list endpoints, pagination, data-access in loops, or public interfaces/schemas. Symptoms — unbounded queries, N+1 access, no latency budget, optimizing without measuring, or changing an interface many consumers depend on. Keywords — pagination, N+1, Hyrum's Law, performance budget, bundle size.

lguidolin/postgres-postgraphile-rls-and-sql

Use when writing PostgreSQL, PostGraphile config, Row-Level Security policies, SQL schema files, or working on the Browser→App→PostGraphile→Postgres data path. Keywords — RLS, SECURITY DEFINER, search_path, pgSettings, grants, roles, GraphQL depth limit, query cost, statement_timeout, SQL file organization.

lguidolin/recording-decisions

Use when a design or architecture decision has been made and needs to be captured — writing a decision record or ADR, updating a decision index, noting a deferred idea, or superseding a past decision. Keywords — ADR, decision record, rationale, rejected alternatives, dependency index.

lguidolin/resilience-and-deploy-safety

Use when planning a deploy, designing a rollback, or responding to an incident or writing a postmortem. Keywords — deploy safety, rollback, immutable artifact, progressive delivery, canary, blast radius, incident response, blameless postmortem, error budget.

lguidolin/ship-it

Use when the user wants to ship work — push, PR, archive decision records, merge, and clean up. Handles the full lifecycle from committing final changes through post-merge cleanup including converting specs/plans to compact decision records.

lguidolin/tests-as-a-control

Use when writing or modifying tests, when a test breaks during a refactor, or when testing permission/role rules. Symptoms — tempted to edit a test to make it pass, testing only the happy path, a deny-test that started passing, flaky tests, or unsure what to assert.

lguidolin/zero-downtime-migrations

Use when changing a database schema where data must survive the change — adding/removing/renaming columns, constraints, indexes, or backfilling. Symptoms — a destructive migration bundled with a code deploy, a NOT NULL column with a backfill, a table-locking UPDATE, or a rename. Keywords — expand/contract, parallel change, backfill, NOT VALID, CREATE INDEX CONCURRENTLY, graphile-migrate.

관련 스킬