backend-development
π―Skillfrom carvalab/k-skills
Proactively builds robust backend APIs using Node.js/TypeScript and Go, applying Clean Architecture and software design principles for scalable microservices.
Part of
carvalab/k-skills(9 items)
Installation
npx skills add carvalab/k-skills --skill backend-developmentSkill Details
PROACTIVELY build backend APIs with Node.js/TypeScript and Go. Use when designing APIs, implementing auth, or building microservices. Applies Clean Architecture, SOLID, DRY, YAGNI, KISS principles.
Overview
# Backend Development
Node.js/TypeScript and Go. PostgreSQL, Redis. REST APIs.
> Related Skills:
>
> - kavak-documentation - USE FIRST for Kavak-specific patterns, kbroker, STS, GitLab CI, Docker templates
> - test-driven-development - USE PROACTIVELY for new features and bug fixes (Red-Green-Refactor)
> - Check .claude/CLAUDE.md or .cursor/rules/* for project-specific conventions
>
> MCP: Use kavak-platform/plati_query tool to query Kavak internal documentation before implementing.
π΄ MANDATORY: Code Reuse Analysis (GATE)
This is a GATE. You cannot write new code until you complete this analysis.
Why This Matters
AI-generated code often duplicates existing logic because the model doesn't "see" all relevant files. This creates:
- Bugs that need fixing in multiple places
- Inconsistent behavior across the codebase
- Maintenance nightmare for humans
Your job: Find existing code FIRST, reuse it, extend it, or extract shared logic.
Step 1: Search Comprehensively
STOP and think: Before searching, extract keywords from YOUR task:
- VERBS - What actions? (create, save, send, process, calculate, update, delete, etc.)
- NOUNS - What domain concepts? (the entities mentioned in your task)
- OUTPUT - What type of result? (Model, Response, Event, etc.)
Then search using YOUR task's actual keywords:
```bash
# Search pattern - replace KEYWORD with your actual task keywords:
grep -rn "KEYWORD" --include=".go" --include=".ts" . | head -50
# Search for existing services/usecases with your domain term:
grep -rn "func.KEYWORD\|KEYWORD.Service\|KEYWORD.Repository" --include=".go" . | head -30
# Use codebase_search for semantic search:
codebase_search "how does existing code [your task action]"
codebase_search "where is [your domain concept] implemented"
```
The goal: Find ANY existing code that does something similar to what your task needs.
Step 2: Read and Evaluate Found Code
For EACH potentially relevant file, read it and answer:
| Question | If YES... |
|----------|-----------|
| Does this do exactly what I need? | Call it directly - inject as dependency |
| Does this do 70%+ of what I need? | Extend it - add method/parameter |
| Does this share 50%+ logic with what I need? | Extract shared helper first |
| Is this only 30% similar? | OK to create new, but document why |
Step 3: Document Your Decision (MANDATORY - Must Output This)
Before writing ANY code, you MUST output this analysis in your response:
```
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β REUSE ANALYSIS β
β£ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ«
β Task: [brief description of what you need to implement] β
β β
β Keywords searched: β
β - Verbs: [actual verbs you searched] β
β - Nouns: [actual domain terms you searched] β
β β
β Existing code found: β
β 1. [file:line] - [function name] - [what it does] β
β 2. [file:line] - [function name] - [what it does] β
β β
β Similarity assessment: β
β - [file1]: [X]% similar because [reason] β
β β
β Decision: [REUSE | EXTEND | EXTRACT | NEW] β
β Rationale: [1-2 sentences why] β
β Action: [specific action - e.g., "inject existing service"] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
If you skip this analysis or create code without it, the task FAILS.
Step 4: Apply Decision Matrix
| Similarity | Action | Example |
|------------|--------|---------|
| >70% | REUSE directly | Inject existing service as dependency, call its method |
| 50-70% | EXTRACT shared helper | Create helper function, refactor existing + use in new |
| 30-50% | Consider interface | Create interface both can implement |
| <30% | OK to create new | Document why existing code doesn't fit |
π΄ Failure Conditions
Your implementation FAILS the Code Reuse Analysis if:
- [ ] You create a new file >100 lines without documenting reuse analysis
- [ ] You duplicate >50% of logic from an existing file
- [ ] You copy-paste code instead of calling existing functions
- [ ] You create a new method that does the same thing as an existing one
---
Core Principles
Architecture: Clean Architecture (4-layer) for new projects β references/architecture.md
Design Principles:
- SOLID - Single Responsibility, Open/Closed, Liskov, Interface Segregation, Dependency Inversion
- DRY - Don't Repeat Yourself (extract reusable code) β
references/dry-detection.md - YAGNI - You Aren't Gonna Need It (don't build unused features)
- KISS - Keep It Simple, Stupid (simplest solution that works)
Comments Rule: Code should be self-documenting. Only add comments when:
- Logic is complex/non-obvious (explain "why", not "what")
- Workarounds or edge cases need context
- Public API documentation (JSDoc/GoDoc)
```typescript
// β BAD: Obvious comment
const age = user.age; // Get user age
// β GOOD: Explains WHY
// Add 1 day buffer for timezone edge cases in billing cycle
const billingDate = addDays(cycleEnd, 1);
```
See references/code-quality.md for detailed examples.
β οΈ Existing Projects Rule
ALWAYS respect existing project structure and patterns:
- Read first - Explore the codebase before making changes
- Follow existing patterns - If project uses a pattern, continue using it
- Don't force architecture - Don't refactor to Clean Architecture unless asked
- Incremental improvement - Apply good practices to NEW code you write
- Ask if unclear - When patterns conflict, ask the user
```
Existing project has flat structure? β Keep flat structure
Existing project has no interfaces? β Don't add interfaces everywhere
Existing project uses callbacks? β Use callbacks (unless migrating)
```
Only apply Clean Architecture patterns to:
- New greenfield projects
- New modules/features in existing projects (when it fits)
- When explicitly asked to refactor
Quick Start
| Language | Test | Lint |
| -------- | --------------- | ------------------- |
| Node/TS | npm test | npm run lint |
| Go | go test ./... | golangci-lint run |
Technology Selection
| Need | Choose |
| ------------------ | ---------------------------------- |
| TypeScript API | NestJS |
| High concurrency | Go + Chi |
| Go database | pgx/v5 + sqlc |
| Node database | Drizzle (new), keep existing |
| Go Redis | rueidis (new), keep existing |
| Go job queue | River (PostgreSQL-backed) |
| Node job queue | pg-boss (PostgreSQL-backed) |
| Events (Kavak) | kbroker (Kafka-by-REST) |
| Rate limiting | pg-boss throttle / River snooze |
| Testing | Vitest (new Node), Jest (existing) |
| Tracing | OpenTelemetry + dd-trace |
> Note: Use kbroker for events between services. Use pg-boss (Node) or River (Go) for job queues.
Common Workflows
New API Endpoint (TDD Approach)
> Use test-driven-development skill for Red-Green-Refactor cycle
- Write failing test first β
test-driven-developmentskill - Design endpoint β
references/api-design.md - Set up handler β
references/go/http-handlers.mdorreferences/node/frameworks.md - Add database access β
references/go/database.mdorreferences/node/database.md - Implement auth β
references/authentication.md - Refactor with tests passing β
references/code-quality.md
Add Similar Feature (DRY-First Approach)
> CRITICAL: When task says "do X like Y" or "add similar to existing"
- Find existing implementation first - search for the feature mentioned in the task
- Analyze similarity β Is >50% of logic the same?
- If similar, REUSE or EXTRACT:
- >70% similar: Inject existing service, call its method
- 50-70% similar: Extract shared helper, refactor existing to use it
- <50% similar: OK to create new, but keep it small
- New code should be <50 lines - if more, you probably missed reuse opportunity
- Test both old and new paths β Ensure refactoring didn't break existing
WRONG vs RIGHT:
| Approach | Result |
|----------|--------|
| β WRONG | Create new file (50-100+ lines) that duplicates existing logic |
| β RIGHT | Inject existing service, call its method (5-10 lines) |
Fix Slow Query
- Profile query β
references/debugging.md(EXPLAIN ANALYZE) - Add indexes β
references/performance.md - Add caching β
references/go/redis-queues.mdorreferences/node/database.md
Deploy New Service
- Write Dockerfile β
references/devops/docker.md - Set up CI/CD β
references/devops/ci-cd.md
Debug Production Issue
- Check logs/traces β
references/debugging.md - Profile if slow β
references/debugging.md(pprof/clinic.js) - Check DB queries β
references/debugging.md(pg_stat_statements)
References
| Reference | When to Use |
| -------------------------------- | ---------------------------------------------------------- |
| Go | |
| references/go/http-handlers.md | Set up Chi routes, handlers, middleware |
| references/go/database.md | Implement pgx/v5, sqlc queries |
| references/go/patterns.md | Apply error handling, validation, testing |
| references/go/redis-queues.md | Add rueidis caching, River job queue |
| Node.js | |
| references/node/frameworks.md | Set up NestJS, Express, Fastify |
| references/node/database.md | Implement Drizzle, Prisma, caching |
| references/node/patterns.md | Apply validation, errors, testing |
| DevOps | |
| references/devops/docker.md | Write Dockerfiles, compose, health checks, DataDog metrics |
| references/devops/ci-cd.md | Configure GitLab CI pipelines |
| Cross-Cutting | |
| references/architecture.md | Clean Architecture (4-layer), microservices, events |
| references/code-quality.md | SOLID, DRY, YAGNI, KISS, design patterns |
| references/dry-detection.md | MANDATORY - DRY detection, code reuse patterns |
| references/api-design.md | Design REST endpoints, versioning |
| references/authentication.md | Implement OAuth 2.1, JWT, RBAC |
| references/security.md | Apply OWASP Top 10, input validation |
| references/performance.md | Optimize caching, queries, pooling |
| references/testing.md | Write unit, integration, E2E tests |
| references/debugging.md | Debug with logs, profilers, tracing |
Kavak-Only References
Use when working on Kavak projects.
| Reference | When to Use |
| --------------------------------------- | ------------------------------------------------ |
| references/kavak/kbroker.md | Publish/subscribe events between services |
| references/kavak/queues-ratelimit.md | Job queues, rate limiting with River/pg-boss |
| references/kavak/microservice-auth.md | Authenticate between services (STS) |
| references/kavak/gitlab-ci.md | Set up kavak-it/ci-jobs v3 pipelines |
| references/kavak/docker-images.md | Build with docker-debian base |
| references/kavak/workload-config.md | Configure .kavak/ dir, cron jobs |
| references/kavak/logging-metrics.md | Use kvklog, kvkmetric SDKs |
More from this repository8
refactor-cleaner skill from carvalab/k-skills
doc-updater skill from carvalab/k-skills
Simplifies code for enhanced readability and maintainability by refining recently modified files while preserving exact functionality.
Performs comprehensive senior-level code review, focusing on complex logic and architecture while delegating style checks to automated tools.
Guides developers through test-driven development by enforcing the Red-Green-Refactor cycle, ensuring tests drive code design and prevent common testing pitfalls.
Develops Next.js applications using TypeScript, Server Components, and Server Actions, optimizing for performance and minimal client-side JavaScript.
Guides developers in creating concise, task-focused agent skills using progressive disclosure and a 3-tier loading architecture.
Skill