skills/researching-options/SKILL.md
Investigates a technical question and produces an opinionated recommendation with evidence. Use when: an unknown blocks planning or implementation, a library or approach needs evaluation before adoption, multiple valid options exist and a comparison is needed, or security and performance implications need assessment. Do not use when: the answer is obvious, it's an implementation detail within an already-decided approach, or it's a business/product decision.
npx skillsauth add maestria-co/ai-playbook researching-optionsInstall 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.
Fill a knowledge gap so a decision can be made or implementation can proceed. Research ends with an explicit recommendation — not a list of options for the reader to evaluate. Transferring the evaluation burden without adding analysis is a failure mode.
Timebox every investigation. Exhaustive research is itself a failure mode. Set a "good enough" bar at the start and stop when you reach it.
Check 1 — Scope the question
Restate the research question precisely before investigating.
Check 2 — Check for prior research
Read .context/research/ to see if this question (or a close variant) was already researched.
State explicitly:
This prevents scope creep. Stop when you reach the bar.
List ≥2 options that could plausibly solve the problem. For each, identify:
Eliminate options that clearly don't fit before spending time on them.
For each viable option, evaluate against relevant criteria. Common criteria:
| Criterion | What to check | |---|---| | Maintenance | Recent commits, open issues, last release date | | Adoption | Download stats, GitHub stars, ecosystem usage | | Security | Known CVEs, security audit history, dependency count | | License | Compatible with project's license requirements | | Fit | TypeScript support, framework compatibility, bundle size | | Docs quality | Are examples clear? Is the API documented? |
Adjust criteria to the question. Not all criteria apply to every investigation.
For each option, state:
Do not cherry-pick evidence. If the "worse" option has a genuine advantage, say so.
State the recommendation clearly:
Recommendation: [Option]
Reason: [2–3 sentences. Why this option, given the project's specific constraints.]
Main tradeoff accepted: [What we're giving up by choosing this over the alternatives.]
Confidence: [High / Medium / Low — with one sentence on why if not High]
Never write "here are the options, you decide." That transfers cognitive load without adding value. Make the call.
Write the full report to .context/research/[topic-slug].md.
Report structure:
# Research: [Topic]
Date: YYYY-MM-DD | Status: Complete
## Recommendation
> **[Option]** — [one sentence why]
[2–3 sentences on the primary tradeoff accepted]
## Options Evaluated
| Criterion | [Option A] | [Option B] | [Option C] |
|---|---|---|---|
## Key Findings
- [finding with evidence]
## Sources
- [source with date accessed]
Research complete: [Topic]
Recommendation: [Option] — [one sentence]
Main tradeoff: [what we're accepting]
Confidence: [High/Medium/Low]
Full report: .context/research/[slug].md
Follow-up unknowns: [none | question to investigate]
Recommendation: jsonwebtoken (jose as fallback for PKCS8/JWKS needs) Main tradeoff: jsonwebtoken uses synchronous crypto by default; for high-throughput services, jose's async WebCrypto API is faster. Confidence: High
Full report: .context/research/jwt-library-selection.md
Key finding: jsonwebtoken has 50M+ weekly downloads, maintained by Auth0, full TypeScript types via @types/jsonwebtoken. CVE history clean since 2022 patch. jose is the modern alternative with native WebCrypto but steeper API. For an Express auth service under moderate load, jsonwebtoken is the safer, better-documented choice. </output> </example>
<example> <scenario>Evaluating approaches for database migrations in a live service</scenario> <input> <task>Research zero-downtime column rename strategies for PostgreSQL with a live service that cannot have more than 30 seconds of read downtime.</task> <context> - PostgreSQL 15, ~50k rows in the affected table - Service is read-heavy (95% reads, 5% writes) - Column: user_name → username across 12 files - Constraint: no more than 30 seconds read downtime </context> </input> <output> Research complete: Zero-downtime column rename in PostgreSQLRecommendation: Expand-contract migration (3-phase: add new column → dual-write → drop old column across 3 deployments) Main tradeoff: Requires 3 separate deployments instead of 1. Adds ~1 sprint of migration overhead. Confidence: High
The single-migration rename approach locks the table for ~2-5 seconds at 50k rows, which violates the 30-second constraint but is borderline. Expand-contract is the only approach that guarantees zero read downtime. Trigger-based sync is an alternative but adds DB-level complexity that's harder to reason about.
Full report: .context/research/postgres-zero-downtime-column-rename.md </output> </example>
<example> <scenario>Research question that turns out to be a product decision</scenario> <input> <task>Research whether we should support social login or only email/password auth.</task> </input> <output> This is a product decision, not a technical one. The technical implementation of either approach is well-understood. The choice depends on: - Target user demographic and their auth preferences - Team's willingness to maintain OAuth integrations - Regulatory requirements (GDPR, CCPA) for social auth dataRoute this question to the product owner or stakeholder before proceeding. Once the product decision is made, the implementing-features or designing-systems pattern can handle the technical side. </output> </example>
</examples>designing-systems.context/research/ — do not deliver findings only in chatdevelopment
Writes and runs a test suite for a piece of code, covering happy path, edge cases, error cases, and security cases. Use when: implementation is complete and needs test coverage, a bug needs a reproduction test and fix validation, or code needs coverage before a refactor. Do not use when: the code under test is not yet implemented, or the spec is still unclear.
testing
Use when creating a new skill, editing an existing skill, or helping a user author a skill for this system. Covers structure, discoverability, quality, and discipline hardening.
development
Evidence-based verification process to run before marking any task complete. Use this skill every time you're about to report that work is done — for features, bug fixes, refactoring, or any code change. This catches the most common failure mode: declaring "done" without proof. If you're finishing up and about to tell the user the task is complete, run this checklist first.
development
Teaches agents how to discover, select, and invoke skills from the skill library. Use this skill whenever you're uncertain which skill applies to a task, when composing multiple skills for complex work, or when you need to understand what skills are available. This is your go-to when facing an ambiguous task and need to figure out the right approach before diving into implementation.