Design Decisions
by vinzenz
Forces documentation of the reasoning behind every significant design decision. Creates a decision log that explains WHY choices were made, alternatives considered, and trade-offs accepted. Prevents unjustified "default" choices.
Skill Details
Repository Files
1 file in this skill directory
name: design-decisions description: Forces documentation of the reasoning behind every significant design decision. Creates a decision log that explains WHY choices were made, alternatives considered, and trade-offs accepted. Prevents unjustified "default" choices.
Design Decision Logger Skill
You are operating with design decision logging capabilities. This skill ensures that every significant design choice has documented reasoning — transforming unconscious defaults into conscious decisions.
Core Philosophy
"Great design isn't about creating features; it's about intentionality."
AI design fails not because it picks the "wrong" options, but because it picks options without reasons. A design where every choice has documented justification will always be better than one with "good defaults."
Why Log Decisions?
For the current design:
- Forces examination of unconscious defaults
- Reveals unjustified choices that need reconsideration
- Creates accountability for design quality
For future iteration:
- Explains WHY something is the way it is
- Enables informed changes (not breaking things accidentally)
- Teaches newcomers the design rationale
For collaboration:
- Makes critique more productive ("I understand why, but...")
- Enables delegation without loss of context
- Creates institutional memory
What Counts as a "Significant Decision"?
<decision_threshold> Log decisions that:
- Affect multiple components or screens
- Establish a pattern that will be repeated
- Required choosing between viable alternatives
- Override a common convention or expectation
- Will be questioned by someone reviewing the design
Don't log:
- Individual pixel values within an established system
- Obvious choices with no real alternatives
- Temporary implementations meant to be revisited </decision_threshold>
Decision Categories
1. Typography Decisions
<typography_decisions> Font Family:
<decision category="typography" element="font-family">
<choice>Geist Sans</choice>
<reason>
Our users are developers. Geist is designed specifically for
developer tools, embodying "simplicity, minimalism, and speed"
which aligns with our principle of "professional precision."
</reason>
<alternatives>
<alternative name="Inter">
Rejected: Overused in our competitive space (Linear, Vercel,
Notion all use it). We need differentiation.
</alternative>
<alternative name="SF Pro">
Rejected: Platform-specific. We need cross-platform consistency.
</alternative>
<alternative name="IBM Plex">
Considered: Good option, but Geist's mono variant is better
integrated. Would reconsider if Geist unavailable.
</alternative>
</alternatives>
<trade_offs>
- Less personality than a distinctive display font
- Requires hosting (not a system font)
+ Excellent readability at all sizes
+ Consistent with developer tool expectations
</trade_offs>
<reversibility>Medium — would require full rebrand to change</reversibility>
</decision>
Type Scale:
<decision category="typography" element="type-scale">
<choice>1.25 ratio (Major Third): 12, 15, 19, 24, 30, 37</choice>
<reason>
Moderate ratio provides clear hierarchy without dramatic jumps.
Appropriate for information-dense interfaces where many levels
of hierarchy are needed.
</reason>
<alternatives>
<alternative name="1.5 ratio (Perfect Fifth)">
Rejected: Too dramatic for our dense UI. Would require
too much scrolling to accommodate large headings.
</alternative>
<alternative name="1.125 ratio (Major Second)">
Rejected: Too subtle. Hierarchy becomes unclear, especially
when combined with weight variations.
</alternative>
</alternatives>
</decision>
</typography_decisions>
2. Color Decisions
<color_decisions> Primary Color:
<decision category="color" element="primary">
<choice>#0066FF (Vibrant blue)</choice>
<reason>
Blue conveys trust and professionalism (aligned with "professional
precision" principle). This specific shade is:
- Distinct from competitor blues (Stripe's is lighter, Linear's is different hue)
- Accessible against both white and dark backgrounds
- Energetic enough to serve as CTA color
</reason>
<alternatives>
<alternative name="#6366F1 (Indigo/Purple)">
Rejected: Too associated with AI/generic SaaS. Would blend
in rather than differentiate.
</alternative>
<alternative name="#10B981 (Green)">
Rejected: Green implies success/completion. Wrong semantic
for primary actions.
</alternative>
</alternatives>
<accessibility>
- White text on this blue: 4.8:1 (AA pass)
- This blue on white: 4.8:1 (AA pass)
- Tested with Coblis for color blindness visibility
</accessibility>
</decision>
Color Palette Philosophy:
<decision category="color" element="palette-philosophy">
<choice>Monochromatic base + single accent</choice>
<reason>
Our UI is information-dense. Multiple colors would create
visual chaos. Single accent creates clear affordances
(blue = interactive). Grayscale hierarchy for content.
</reason>
<principles_served>
- "Professional precision" — not playful multicolor
- "Focus on content" — color doesn't distract
</principles_served>
</decision>
</color_decisions>
3. Spacing Decisions
<spacing_decisions> Base Unit:
<decision category="spacing" element="base-unit">
<choice>4px base unit</choice>
<reason>
4px allows fine-grained control while maintaining consistency.
8px would be too coarse for our dense UI. Scale: 4, 8, 12, 16,
24, 32, 48, 64.
</reason>
<alternatives>
<alternative name="8px base">
Rejected: Jumps between 8 and 16 too large for subtle
adjustments in dense layouts.
</alternative>
</alternatives>
<implementation>
CSS custom properties: --space-1 through --space-8
Tailwind: Extended spacing scale
</implementation>
</decision>
Component Density:
<decision category="spacing" element="density">
<choice>Compact density (less padding than typical)</choice>
<reason>
Power users (our target) prefer information density. They're
scanning, not reading. Reference: Linear, GitHub, VS Code
all use compact density for professional tools.
</reason>
<trade_offs>
- Harder for beginners
- Requires careful touch target sizing
+ More visible at once
+ Feels professional/powerful
</trade_offs>
</decision>
</spacing_decisions>
4. Layout Decisions
<layout_decisions> Page Structure:
<decision category="layout" element="page-structure">
<choice>Fixed sidebar + fluid content area</choice>
<reason>
Sidebar provides consistent navigation anchor. Fluid content
allows adaptation to data needs. Reference: Linear, Notion,
VS Code all use this pattern for tool-based products.
</reason>
<alternatives>
<alternative name="Top navigation">
Rejected: Loses vertical space. Our users have wide screens;
horizontal space is abundant.
</alternative>
<alternative name="Collapsible sidebar">
Accepted as option: Sidebar can collapse for full-focus mode.
</alternative>
</alternatives>
</decision>
Grid System:
<decision category="layout" element="grid">
<choice>12-column grid with 24px gutters</choice>
<reason>
12 divides evenly by 2, 3, 4, 6 — maximum flexibility.
24px gutters balance density with breathing room.
</reason>
<responsive_behavior>
- Desktop: 12 columns
- Tablet: 8 columns
- Mobile: 4 columns
</responsive_behavior>
</decision>
</layout_decisions>
5. Component Decisions
<component_decisions> Button Styles:
<decision category="components" element="buttons">
<choice>
Primary: Filled blue, white text
Secondary: Outlined, blue border, blue text
Tertiary: Text only, blue text
Destructive: Filled red for dangerous actions
</choice>
<reason>
Visual hierarchy matches importance hierarchy. Fill = most
important, outline = alternative option, text = least prominent.
Color coding (blue vs red) adds semantic meaning.
</reason>
<size_rationale>
Default: 36px height (comfortable click target)
Small: 28px (for dense contexts)
Large: 44px (for primary page actions)
</size_rationale>
</decision>
Form Inputs:
<decision category="components" element="inputs">
<choice>Bottom border only (not full border)</choice>
<reason>
Reduces visual noise in forms with many fields. Lighter
appearance aligns with "professional precision" — not
chunky or heavy.
</reason>
<alternatives>
<alternative name="Full border">
Available as variant: For isolated inputs or emphasis.
</alternative>
</alternatives>
<accessibility>
Border color meets 3:1 contrast for UI components.
Focus state adds left border + background shift.
</accessibility>
</decision>
</component_decisions>
6. Motion Decisions
<motion_decisions> Animation Philosophy:
<decision category="motion" element="philosophy">
<choice>Functional motion only — no decorative animation</choice>
<reason>
Our users are power users doing focused work. Animation
should communicate state changes, not entertain. Every
animation must answer: "What information does this convey?"
</reason>
<where_animation_used>
- Page transitions (context: what changed)
- Loading states (progress: something is happening)
- Feedback (confirmation: action succeeded/failed)
- Reveals (hierarchy: new content appearing)
</where_animation_used>
<where_animation_not_used>
- Hover effects (too noisy at high interaction rates)
- Idle states (distracting)
- "Personality" animations (off-brand)
</where_animation_not_used>
</decision>
Timing:
<decision category="motion" element="timing">
<choice>
Micro-interactions: 150ms
Component transitions: 200ms
Page transitions: 300ms
Easing: cubic-bezier(0.4, 0, 0.2, 1) (Material "standard")
</choice>
<reason>
Fast enough to feel instant, slow enough to be perceived.
Consistent easing creates unified feel. Material easing
is well-tested and feels natural.
</reason>
</decision>
</motion_decisions>
Decision Log Template
<decision_template>
<design_decision_log>
<metadata>
<project>Project name</project>
<created>Date</created>
<last_updated>Date</last_updated>
<authors>Who made/documented these decisions</authors>
</metadata>
<principles_reference>
<!-- Link back to design brief -->
<principle id="1">Principle name</principle>
<principle id="2">Principle name</principle>
</principles_reference>
<decisions>
<decision id="DES-001" category="typography" date="YYYY-MM-DD">
<element>What was decided</element>
<choice>The decision made</choice>
<reason>Why this choice serves our users/principles</reason>
<alternatives>
<alternative name="Option name" rejected_because="Reason"/>
</alternatives>
<trade_offs>
<accepted>What we gave up</accepted>
<gained>What we gained</gained>
</trade_offs>
<principles_served>1, 2</principles_served>
<reversibility>easy/medium/hard</reversibility>
<depends_on>DES-000 (if dependent on another decision)</depends_on>
</decision>
<!-- More decisions... -->
</decisions>
<unresolved>
<question id="Q-001">
<topic>What needs to be decided</topic>
<options>Possible choices</options>
<blocking>What this blocks</blocking>
</question>
</unresolved>
</design_decision_log>
</decision_template>
Validation Questions
For each logged decision, verify:
Red Flags
Decisions that need reconsideration:
<red_flags>
- "It's the default" — Not a reason. Why is the default right for us?
- "Everyone does it" — Not a reason. Why is convention right here?
- "It looks good" — Not a reason. Good for whom? In what context?
- "I like it" — Not a reason. User preference trumps designer preference.
- No alternatives listed — Did you actually consider options?
- Principle not referenced — How does this serve the design goals? </red_flags>
Output Summary
<summary_format>
<decision_log_summary>
<statistics>
<total_decisions>N</total_decisions>
<fully_justified>N with complete reasoning</fully_justified>
<needs_revision>N missing justification</needs_revision>
<unresolved_questions>N</unresolved_questions>
</statistics>
<coverage>
<typography_decisions>N</typography_decisions>
<color_decisions>N</color_decisions>
<spacing_decisions>N</spacing_decisions>
<layout_decisions>N</layout_decisions>
<component_decisions>N</component_decisions>
<motion_decisions>N</motion_decisions>
</coverage>
<red_flags_found>
<flag decision_id="DES-XXX">
<issue>What's problematic</issue>
<recommendation>How to fix</recommendation>
</flag>
</red_flags_found>
<overall_intentionality>
Score 1-10 with explanation of how well decisions are justified
</overall_intentionality>
</decision_log_summary>
</summary_format>
Key Principle
"It feels like a person looked at it and said, 'This is it.'" — On Linear's design
Every decision in a great design system should feel like someone cared about it specifically. The decision log is proof of that care.
Related Skills
Team Composition Analysis
This skill should be used when the user asks to "plan team structure", "determine hiring needs", "design org chart", "calculate compensation", "plan equity allocation", or requests organizational design and headcount planning for a startup.
Kpi Dashboard Design
Design effective KPI dashboards with metrics selection, visualization best practices, and real-time monitoring patterns. Use when building business dashboards, selecting metrics, or designing data visualization layouts.
Dbt Transformation Patterns
Master dbt (data build tool) for analytics engineering with model organization, testing, documentation, and incremental strategies. Use when building data transformations, creating data models, or implementing analytics engineering best practices.
Sql Optimization Patterns
Master SQL query optimization, indexing strategies, and EXPLAIN analysis to dramatically improve database performance and eliminate slow queries. Use when debugging slow queries, designing database schemas, or optimizing application performance.
Clinical Decision Support
Generate professional clinical decision support (CDS) documents for pharmaceutical and clinical research settings, including patient cohort analyses (biomarker-stratified with outcomes) and treatment recommendation reports (evidence-based guidelines with decision algorithms). Supports GRADE evidence grading, statistical analysis (hazard ratios, survival curves, waterfall plots), biomarker integration, and regulatory compliance. Outputs publication-ready LaTeX/PDF format optimized for drug develo
Senior Data Scientist
World-class data science skill for statistical modeling, experimentation, causal inference, and advanced analytics. Expertise in Python (NumPy, Pandas, Scikit-learn), R, SQL, statistical methods, A/B testing, time series, and business intelligence. Includes experiment design, feature engineering, model evaluation, and stakeholder communication. Use when designing experiments, building predictive models, performing causal analysis, or driving data-driven decisions.
Scientific Schematics
Create publication-quality scientific diagrams using Nano Banana Pro AI with smart iterative refinement. Uses Gemini 3 Pro for quality review. Only regenerates if quality is below threshold for your document type. Specialized in neural network architectures, system diagrams, flowcharts, biological pathways, and complex scientific visualizations.
Mermaid Diagrams
Comprehensive guide for creating software diagrams using Mermaid syntax. Use when users need to create, visualize, or document software through diagrams including class diagrams (domain modeling, object-oriented design), sequence diagrams (application flows, API interactions, code execution), flowcharts (processes, algorithms, user journeys), entity relationship diagrams (database schemas), C4 architecture diagrams (system context, containers, components), state diagrams, git graphs, pie charts,
Ux Researcher Designer
UX research and design toolkit for Senior UX Designer/Researcher including data-driven persona generation, journey mapping, usability testing frameworks, and research synthesis. Use for user research, persona creation, journey mapping, and design validation.
Supabase Postgres Best Practices
Postgres performance optimization and best practices from Supabase. Use this skill when writing, reviewing, or optimizing Postgres queries, schema designs, or database configurations.
