software-architecture

Analyze software architecture problems and recommend the lightest fitting structure.

1|Updated May 12, 2026
One-click install
npx skills add https://github.com/Firzus/agent-skills --skill software-architecture-firzus
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: software-architecture
Source: https://github.com/Firzus/agent-skills/tree/main/skills/engineering/software-architecture
Command: npx skills add https://github.com/Firzus/agent-skills --skill software-architecture-firzus

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

This Skill helps you choose and defend the right software architecture when code is getting hard to change, hard to test, or overloaded with unnecessary patterns. It reduces accidental complexity by steering decisions around module boundaries, dependency direction, state management, and runtime patterns.

Core Features & Use Cases

  • Macro architecture selection: Compare layered, hexagonal, onion, clean, modular monolith, microservices, vertical slice, and event-driven structures.
  • Boundary and dependency guidance: Define ports, enforce inward dependencies, prevent cycles, and translate at system edges.
  • Runtime pattern selection: Choose between strategy, command, observer, state machine, pooling, memoization, reactive state, and async workflow patterns.
  • Use case: You are refactoring a growing app and need to decide whether to keep it layered, introduce ports and adapters, split into modules, or centralize cross-cutting concerns at the boundaries.

Quick Start

Ask the skill to assess your current codebase and recommend the simplest architecture that fits your business rules, dependencies, and change patterns.

Frequently Asked Questions about software-architecture

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I choose between clean architecture and hexagonal architecture for my application?

Clean architecture and hexagonal architecture both enforce dependency inversion and boundary translation, but the right choice depends on your domain complexity, coupling, and runtime behavior. This Skill analyzes your specific dependencies to recommend the lightest structure that fits.

What is the best way to define module boundaries when refactoring a growing codebase?

Defining module boundaries requires explicit handling of coupling, cohesion, and dependency direction to prevent cycles. This Skill assesses your current codebase and recommends the simplest architecture that fits your business rules and change patterns.

When do I need to split a layered architecture into a modular monolith or microservices?

Splitting a layered architecture into a modular monolith or microservices is needed when code becomes hard to change or test. This Skill evaluates your cross-cutting concerns and over-engineering tradeoffs to determine if a structural split is justified.

How do I select the right runtime patterns for state management and async workflows?

Selecting runtime patterns for state management and async workflows involves choosing between strategy, command, observer, state machine, pooling, and memoization patterns. This Skill matches the appropriate runtime pattern to your specific architectural structure.

Why does adding ports and adapters lead to over-engineering in simple applications?

Adding ports and adapters introduces accidental complexity through boundary translation and strict dependency inversion, which may be unnecessary for simple domains. This Skill helps steer decisions to reduce accidental complexity by recommending the lightest fitting structure.