skills/thinking-triz/SKILL.md
Use when stuck between two architecture or API requirements that seem mutually exclusive — name the contradiction precisely, then separate the conflicting states in time, space, or condition.
npx skillsauth add tjboudreaux/cc-thinking-skills thinking-trizInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
TRIZ is a systematic method for resolving architecture and API design contradictions — situations where two requirements seem mutually exclusive. When you're about to accept a trade-off because "you can't have both," TRIZ says: name the contradiction precisely, then try to separate the conflicting states in time, space, or condition so you get both — no compromise.
The separation moves are the primary procedure. The 40 Inventive Principles are a reference library, not a required checklist. The skill is scoped to technical design contradictions (architecture, API, system parameters); it is NOT for non-technical problems, ordinary prioritization, or contradictions that dissolve under measurement.
Core Principle: Great design doesn't compromise — it separates. Find the dimension where the conflicting states can coexist.
Decision flow:
Two requirements seem mutually exclusive?
→ Yes → NAME THE CONTRADICTION, TRY SEPARATION
→ No → About to accept a trade-off curve compromise?
→ Yes → APPLY TRIZ FIRST
→ No → This is a routine decision — just pick based on constraints
When stuck between two architecture or API requirements that seem mutually exclusive:
If one option is simply better given your constraints, just pick it. If you can cheaply test which side actually matters, test instead of designing a separation. For standard patterns (cache-aside, CQRS, feature flags), apply the pattern directly.
Use this template:
"We need [PARAMETER A] to be [STATE 1] for [BENEFIT 1]
BUT also [STATE 2] for [BENEFIT 2]"
Example:
"We need the API to be STABLE for client compatibility
BUT also EVOLVING to support new features"
If you can't write the contradiction in this form, it's not a TRIZ problem — use another skill.
Before solving, describe the outcome where the problem solves itself:
"The API supports both old and new clients simultaneously,
without version negotiation overhead,
while maintaining a single codebase."
IFR questions: What if the problem solved itself? What if the harmful element became useful? What's the result with zero cost?
For each separation dimension, ask: "Can the conflicting states exist at different [times/places/conditions/scales]?"
"Can we be in state 1 at one time and state 2 at another?"
Contradiction: "Cache must be FRESH AND cached"
Separation in Time: TTL-based invalidation — cached now, refreshed later
"Can we be in state 1 in one place and state 2 in another?"
Contradiction: "Data must be LOCAL (fast) AND DISTRIBUTED (resilient)"
Separation in Space: Multi-region with local reads, distributed writes
"Can we be in state 1 under some conditions and state 2 under others?"
Contradiction: "Auth must be STRICT AND frictionless"
Separation by Condition: Strict for sensitive operations, frictionless for low-risk — risk-based authentication
"Can state 1 and state 2 exist at different levels of the system?"
Contradiction: "API must be STABLE AND evolving"
Separation in Scale: Stable interface (API contract), evolving implementation — versioned APIs
When no separation dimension resolves the contradiction, scan the software-adapted inventive principles for inspiration:
| Principle | Software Pattern | |-----------|-----------------| | Segmentation (#1) | Microservices, sharding, chunked processing | | Preliminary Action (#10) | Pre-computation, caching, warm-up, materialized views | | The Other Way Round (#13) | Push vs pull, invert control, event-driven instead of polling | | Intermediary (#24) | Proxy, message queue, API gateway, adapter | | Copying (#26) | Caching, replication, CDN, read replicas | | Dynamization (#15) | Feature flags, runtime configuration, adaptive thresholds | | Another Dimension (#17) | Add metadata layer, versioning, event sourcing |
The full 40 principles are reference material; scan only the most applicable ones.
Before adding new components, ask: what already exists that can be used?
Before: "We need a new service to track user sessions"
Resource check:
- What data already exists? → Auth tokens carry user identity
- What's already running? → Load balancer sees all requests
- What's unused? → Request headers have room for session ID
Solution: Encode session in existing auth flow — no new service
Combine the separation move with resource reuse into a concrete design decision. Document the contradiction, the separation dimension used, and the resolution.
A completed TRIZ analysis produces:
| Anti-Pattern | Symptom | Correction | |---|---|---| | Manufacturing contradictions | Applying TRIZ to "which database should we use" when one is clearly better | Use it only for genuine "I need both opposite states" tension | | Compromising instead of separating | Accepting a midpoint on the trade-off curve without trying separation | Try all four separation dimensions before compromising | | Skipping separation, jumping to principles | Immediately scanning the 40 principles without trying time/space/condition/scale | Separation is the primary procedure; principles are the fallback | | Applying to non-technical problems | Using TRIZ for org dynamics or interpersonal conflicts | Separation targets system parameters, not people | | Over-applying to testable contradictions | Running full TRIZ when a quick measurement resolves which side matters | If you can test it cheaply, test it | | Ignoring existing resources | Adding new components when existing ones could be reused | Resource analysis before new component proposals |
tools
About to add a feature/layer/process to fix a problem. First ask what to remove instead — subtraction is often more robust than addition. Use for simplification and complexity reduction.
testing
You need to trace how a system would fail or behave at a scale you can't cheaply test or measure. Use to imagine the scenario and walk the consequence chain step by step.
devops
Use when optimizing latency or throughput in a pipeline and one stage dominates—focus all effort on that single bottleneck, since speeding up the others changes nothing until it's fixed.
development
Use when debugging across services/an incident where a fix in one place breaks another, or behavior is emergent and no single component explains it. Maps the system and traces causes.