thinking-steel-manning
Use before rejecting a proposal or when you're inclined to just agree with the user. Build the strongest version of the opposing case first, then engage that — not a weak version.
What this skill does
# Steel-Manning ## Overview Steel-manning is the opposite of straw-manning. Instead of attacking the weakest version of an opposing argument, you construct and address the strongest possible version. This leads to better decisions, more productive debates, and deeper understanding of trade-offs. **Core Principle:** To truly evaluate an idea, argue against its best form. If you can defeat the strongest version, you've actually learned something. ## When to Use - Design reviews - Evaluating alternative approaches - Conflict resolution - Validating your own decisions - Code review discussions - Architecture debates - When you disagree with someone's proposal - Before rejecting an idea Decision flow: ``` Disagreeing with a proposal? → Can you state their best argument? → no → STEEL-MAN FIRST → Are you attacking a weak version? → yes → CONSTRUCT STRONGER VERSION → Have you found the core insight? → no → DIG DEEPER About to agree with the user's plan? → Have you stated the strongest case against it? → no → STEEL-MAN THE OPPOSING VIEW FIRST ``` This skill is the direct counter to **sycophancy** — the pull to validate whatever the user proposed. Before endorsing a plan, construct the best case *against* it; agreement that survives that is worth more than reflexive agreement. ## When NOT to Use - **The matter is settled fact, not a position.** Don't steel-man a factual error, a security anti-pattern, or a violated requirement — correct it. Steel-manning is for genuine trade-offs and judgment calls, not for manufacturing a defense of something wrong. - **You already agree for good, stated reasons.** If you've actually weighed it, don't perform a fake debate; say why you agree. - **Trivial or fully reversible choices** where the cost of being wrong is near zero — the deliberation isn't worth the budget. - **An emergency requiring immediate action** — steel-man the post-incident review, not the live fire. ## Trigger Card Before rejecting a proposal or when you're inclined to just agree with the user: 1. **State the opposing case in its strongest form** — not the version that's easy to knock down. What would its best advocate say? 2. **Find what's actually true in it** — even if you reject the conclusion, what valid insight or concern does it surface? 3. **Engage that strongest version** — respond to what was actually claimed, not a weak version. If your position still holds, great; if not, update. Skip for trivial or fully reversible choices where the cost of being wrong is near zero. In an emergency, steel-man the post-incident review, not the live fire. ## The Steel-Manning Process ### Step 1: Understand the Original Argument Before improving, understand: ```markdown ## Original Proposal Proposal: "We should rewrite the backend in Rust" Stated reasons: - Memory safety - Better performance - Modern language Apparent weaknesses: - Team doesn't know Rust - Rewrite is risky - Current system works ``` ### Step 2: Identify the Core Insight What's the strongest kernel of truth? ```markdown ## Core Insight Behind "rewrite in Rust" is: - Concern about memory-related bugs in production - Performance problems that are hard to solve in current language - Technical debt making changes slow The proposal might be wrong, but the concerns are valid. ``` ### Step 3: Construct the Strongest Version Build the best possible case: ```markdown ## Steel-Manned Argument "Our memory-safety issues have caused 3 major outages this year, costing us ~$500K in engineering time and customer trust. Our performance problems stem from GC pauses that are fundamental to our current runtime. While a rewrite is risky, the incremental cost of working around these limitations is growing. A gradual rewrite of performance-critical paths to Rust would: - Eliminate a class of bugs (memory safety) - Solve GC-related latency issues - Attract engineers who want modern tooling - Create optionality for high-performance features The risk can be mitigated by: - Starting with one isolated service - Keeping the team small and focused - Maintaining the old system during transition - Having clear rollback criteria" ``` ### Step 4: Address the Steel-Manned Version Now engage with the strongest argument: ```markdown ## Response to Steel-Manned Argument The strongest case for Rust addresses real problems. However: Memory safety issues: - 2 of 3 outages were logic bugs, not memory bugs - Could be addressed with better testing in current language - Rust learning curve might introduce new bug classes Performance: - GC issues could be addressed with tuning - Critical path is <5% of codebase - FFI to native code is an option without full rewrite The 6-month investment in Rust might be better spent: - 2 months: Performance profiling and GC tuning - 2 months: Targeted native extensions for hot paths - 2 months: Improved testing/monitoring This addresses the concerns with lower risk. ``` ### Step 5: Find the Synthesis What's the best answer considering both sides? ```markdown ## Synthesis The Rust proposal was right about the problems, less right about the solution. Agreed: - Memory safety is a real concern (but smaller than stated) - Performance needs improvement (but addressable incrementally) - Technical modernization has value (but not at rewrite cost) Plan: 1. Address immediate performance with profiling + tuning 2. Build one small service in Rust as learning experiment 3. Evaluate Rust for future services based on learnings 4. Don't rewrite existing system This takes the best of both positions. ``` ## Steel-Manning Patterns ### In Design Reviews ```markdown ## Design Review: Microservices Proposal Weak version to avoid: "They just want to use trendy tech" Steel-manned version: "The monolith has become a development bottleneck. Deploy conflicts are causing delays. Different teams need different scaling characteristics. The proposal addresses real coordination problems." Now address: "The coordination problems are real, but can we solve them with modular monolith patterns before taking on distributed systems complexity?" ``` ### In Code Reviews ```markdown ## Code Review: Complex Abstraction Weak critique: "This is over-engineered" Steel-manned understanding: "The author anticipated we'll need to support multiple backends. This abstraction makes adding new backends trivial. The complexity exists to serve future flexibility." Better critique: "I understand this enables multiple backends. Let's validate that requirement—if we only ever need one, the abstraction adds maintenance burden without benefit." ``` ### In Conflict Resolution ```markdown ## Team Disagreement: Testing Strategy Person A: "We need 100% code coverage" Person B: "Code coverage is a vanity metric" Steel-man A: "Coverage ensures we think about edge cases and makes refactoring safer. Without coverage requirements, critical paths go untested." Steel-man B: "Coverage without quality gives false confidence. Testing getters/setters wastes time better spent on integration tests that catch real bugs." Synthesis: "Coverage is valuable for complex logic, less valuable for trivial code. Let's require coverage for business logic modules, but focus on integration tests for overall system confidence." ``` ### In Self-Critique ```markdown ## Validating My Own Decision My decision: Use NoSQL for this project Steel-man the opposite: "SQL has survived 50 years because relational models work for most data. NoSQL solves problems most projects don't have. The flexibility of schemaless data becomes a bug when requirements solidify. Joins are a feature, not a limitation." Now: Does my NoSQL choice survive this critique? - Do I actually need schemaless flexibility? - Will I regret not having joins? - Am I solving a problem I don't have? ``` ## Steel-Manning Red Flags Signs you're straw-manning instead: | Straw-Man Sign | Example | Fix | |----------------|---------|-----| | "They just want..." | "T
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.