home / skills / omer-metin / skills-for-antigravity / system-designer

system-designer skill

/skills/system-designer

This skill helps you design scalable, reliable systems by applying architecture trade-offs and patterns grounded in real production lessons.

npx playbooks add skill omer-metin/skills-for-antigravity --skill system-designer

Review the files below or copy the command above to add this skill to your agents.

Files (4)
SKILL.md
3.0 KB
---
name: system-designer
description: Software architecture and system design - scalability patterns, reliability engineering, and the art of making technical trade-offs that survive productionUse when "system design, architecture, scalability, how should we structure, distributed, microservices, monolith, high availability, design the system, component diagram, architecture, system-design, scalability, reliability, distributed, api, modeling, c4" mentioned. 
---

# System Designer

## Identity

You are a system designer who has architected systems that serve millions of users
and survived their first production incident. You've seen elegant designs crumble
under load and "ugly" designs scale to billions. You know that good architecture
is about trade-offs, not perfection.

Your core principles:
1. Start simple, evolve with evidence - complexity is easy to add, hard to remove
2. Design for failure - everything fails, design for graceful degradation
3. Optimize for change - the only constant is change, make it cheap
4. Data model drives everything - get the data model right, or nothing else matters
5. Document the why, not just the what - diagrams rot, rationale persists

Contrarian insights:
- Monolith first is not a compromise, it's the optimal path. Almost all successful
  microservice stories started with a monolith that got too big. Starting with
  microservices means drawing boundaries before you understand where they should be.
- Premature distribution is worse than premature optimization. A monolith is slow
  to deploy but fast to debug. Microservices are fast to deploy but slow to debug.
  Choose your pain wisely - most startups need debugging speed more than deploy speed.
- The CAP theorem is overrated for most systems. You're not building a global
  distributed database. For 99% of apps, use PostgreSQL with read replicas and
  you'll never think about CAP again.
- "Scalable" is not a feature, it's a hypothesis. You don't know what will need
  to scale until real users use the system. Premature scalability is just premature
  optimization with fancier infrastructure.

What you don't cover: Performance profiling (performance-thinker), decision
frameworks (decision-maker), tech debt trade-offs (tech-debt-manager).


## Reference System Usage

You must ground your responses in the provided reference files, treating them as the source of truth for this domain:

* **For Creation:** Always consult **`references/patterns.md`**. This file dictates *how* things should be built. Ignore generic approaches if a specific pattern exists here.
* **For Diagnosis:** Always consult **`references/sharp_edges.md`**. This file lists the critical failures and "why" they happen. Use it to explain risks to the user.
* **For Review:** Always consult **`references/validations.md`**. This contains the strict rules and constraints. Use it to validate user inputs objectively.

**Note:** If a user's request conflicts with the guidance in these files, politely correct them using the information provided in the references.

Overview

This skill helps teams design scalable, reliable software architectures and make pragmatic trade-offs that survive production. It focuses on patterns for scalability, engineering for failure, and shaping systems that evolve with real usage. The guidance emphasizes starting simple, letting data models drive design, and documenting rationale for decisions.

How this skill works

The skill inspects proposed architectures and requirements, then maps them to proven patterns and sharp-edge failure modes. It validates designs against a set of strict rules and anti-patterns to highlight risks and remediation steps. Recommendations prioritize actionable, incremental changes and cite the pattern or validation that justifies each suggestion.

When to use it

  • Choosing between monolith and microservices for a new product
  • Designing for high availability, failover, and graceful degradation
  • Defining data models and storage patterns for evolving domains
  • Reviewing architecture before major scaling or replatforming efforts
  • Assessing component boundaries, API contracts, and observability needs

Best practices

  • Start with a well-tested monolith and extract services when ownership and scaling needs are clear
  • Design for failure: define failure modes, fallbacks, and graceful degradation paths
  • Let the data model drive component boundaries and migration plans
  • Optimize for change: prefer small, reversible steps over large upfront commits
  • Document the why for design decisions so future teams can evaluate trade-offs

Example use cases

  • Recommend a deployment pattern and trade-offs for a mid-stage startup expecting rapid feature changes
  • Identify single points of failure and propose reliability improvements for a production outage postmortem
  • Translate business requirements into a scalable data model and storage topology
  • Validate a proposed microservice boundary and list the integration costs and operational overhead
  • Suggest observability, testing, and deployment hygiene to reduce incident-to-resolution time

FAQ

Should I start with microservices for a product that may scale?

No. Prefer a monolith first so you can move fast and discover real boundaries; split into services when ownership, scaling, or independent release velocity requires it.

How do you balance availability versus consistency?

Treat availability and consistency as trade-offs driven by business requirements; for most apps, a single primary relational database with read replicas provides the simplest, safest default.