POC Planning

VerifiedSafe

Design and plan proofs-of-concept (POCs), spikes, and technical experiments to validate assumptions, reduce uncertainty, and de-risk technical decisions.

Sby Skills Guide Bot
DevelopmentIntermediate
7/22/2026
Claude Code
#proof-of-concept#spike-planning#experimentation#uncertainty-reduction#technical-validation

Recommended for

Automated summary

This skill guides the design of proofs-of-concept, spikes and technical experiments aimed at validating assumptions and reducing uncertainty before committing to an architecture.

Strengths

  • Clarifies the difference between spike, POC, prototype, MVP and pilot through a comparison table and a selection heuristic.
  • Enforces a time-box, an explicit hypothesis and acceptance criteria for every spike.
  • Structures how results are reported: finding, evidence, recommendation, next steps and lessons learned.

Limitations

  • The supplied content is truncated: the templates cut off mid-way through a C# code sample.
  • Relies on external skills (docs-management) and MCP servers (perplexity) that are not included.
  • Examples are written in C#/.NET and are not directly transferable to other stacks.
When to use it

Use it when a team must decide whether a technology or approach is viable before investing in full development.

When not to use it

Avoid it when the need is already well understood, or when the task is delivering a planned feature rather than resolving uncertainty.

Security analysis

Safe
Quality score78/100

The skill only contains planning guidance and C# record/enum templates for spike and POC design. Declared tools are Read, Glob, Grep, Write, Edit — no bash, network, or destructive operations. The references to invoking a docs-management skill and using MCP servers are advisory documentation guidance, not executable or exfiltrating instructions. No secrets, tokens, obfuscation, or safety-disabling content present.

No concerns found

How this analysis is made

Examples

Scope a technology spike
We're considering Kafka for our event pipeline but nobody on the team has used it. Help me design a 3-day spike: the exact question, our hypothesis, acceptance criteria, and a template for recording the outcome.
Pick the right experiment type
We're unsure both whether our API can handle 10k requests per second and what the admin UI should look like. Which experiment types should we run, and in what order?
Draft a POC plan
Draft a POC plan to validate whether our legacy .NET service can run in Linux containers — include scope, time-box, success criteria, risks and what we'd do with each possible outcome.

name: poc-planning description: Proof-of-concept and spike design for uncertainty reduction and technology validation allowed-tools: Read, Glob, Grep, Write, Edit

POC Planning Skill

When to Use This Skill

Use this skill when:

  • Poc Planning tasks - Working on proof-of-concept and spike design for uncertainty reduction and technology validation
  • Planning or design - Need guidance on Poc Planning approaches
  • Best practices - Want to follow established patterns and standards

Overview

Design and plan proofs-of-concept (POCs), spikes, and technical experiments to validate assumptions, reduce uncertainty, and de-risk technical decisions.

MANDATORY: Documentation-First Approach

Before providing POC planning guidance:

  1. Invoke docs-management skill for methodology documentation
  2. Verify current practices via MCP servers (perplexity for agile spike patterns)
  3. Base all guidance on proven experimentation frameworks

POC vs Spike vs Prototype

Terminology Clarification

| Type | Purpose | Duration | Output | |------|---------|----------|--------| | Spike | Answer a specific technical question | Hours to days | Knowledge, decision | | POC | Prove a concept is technically feasible | Days to weeks | Working demonstration | | Prototype | Explore user experience and requirements | Weeks | Interactive mockup | | MVP | Validate market fit with minimal investment | Weeks to months | Shippable product | | Pilot | Test solution in production environment | Months | Operational feedback |

Selection Guide

public enum ExperimentType
{
    Spike,      // "Can we do X?" - focused technical investigation
    POC,        // "Does approach Y work?" - feasibility demonstration
    Prototype,  // "What should it look like?" - UX exploration
    MVP,        // "Will users pay for it?" - market validation
    Pilot       // "Does it work in production?" - operational validation
}

public static class ExperimentSelector
{
    public static ExperimentType Recommend(UncertaintyProfile uncertainty)
    {
        // Technical uncertainty: Spike or POC
        if (uncertainty.TechnicalUncertainty is High or VeryHigh)
        {
            return uncertainty.Scope == Scope.Narrow
                ? ExperimentType.Spike
                : ExperimentType.POC;
        }

        // UX/Requirements uncertainty: Prototype
        if (uncertainty.RequirementsUncertainty is High or VeryHigh)
            return ExperimentType.Prototype;

        // Market uncertainty: MVP
        if (uncertainty.MarketUncertainty is High or VeryHigh)
            return ExperimentType.MVP;

        // Operational uncertainty: Pilot
        if (uncertainty.OperationalUncertainty is High or VeryHigh)
            return ExperimentType.Pilot;

        return ExperimentType.Spike; // Default to smallest experiment
    }
}

Spike Design

Spike Structure

public sealed record Spike(
    string Id,
    string Title,
    string Question,          // What we're trying to answer
    string Hypothesis,        // What we expect to find
    TimeSpan TimeBox,         // Maximum duration
    IReadOnlyList<string> Acceptance, // How we know we're done
    string Owner,
    SpikeStatus Status,
    SpikeOutcome? Outcome);

public sealed record SpikeOutcome(
    bool QuestionAnswered,
    string Finding,
    string Evidence,
    string Recommendation,
    IReadOnlyList<string> NextSteps,
    IReadOnlyList<string> LessonsLearned);

public enum SpikeStatus
{
    Planned,
    InProgress,
    Completed,
    Abandoned
}

Spike Planning Template

public static class SpikeTemplates
{
    public static Spike TechnologyEvaluationSpike(
        string technology,
        string useCase,
        TimeSpan duration)
    {
        return new Spike(
            Id: $"SPIKE-{DateTime.UtcNow:yyyyMMdd}-{Guid.NewGuid():N[..8]}",
            Title: $"Evaluate {technology} for {useCase}",
            Question: $"Can {technology} meet our requirements for {useCase}?",
            Hypothesis: $"We believe {technology} can handle our {useCase} requirements within acceptable performance bounds",
            TimeBox: duration,
            Acceptance: new[]
            {
                $"Document {technology} capabilities relevant to {useCase}",
                "Identify any blocking limitations",
                "Measure key performance characteristics",
                "Provide go/no-go recommendation with rationale"
            },
            Owner: "",
            Status: SpikeStatus.Planned,
            Outcome: null);
    }

    public static Spike IntegrationSpike(
        string sourceSystem,
        string targetSystem,
        TimeSpan duration)
    {
        return new Spike(
            Id: $"SPIKE-{DateTime.UtcNow:yyyyMMdd}-{Guid.NewGuid():N[..8]}",
            Title: $"Integration: {sourceSystem} to {targetSystem}",
            Question: $"Can we successfully integrate {sourceSystem} with {targetSystem}?",
            Hypothesis: $"We can establish bidirectional data flow between {sourceSystem} and {targetSystem} using their APIs",
            TimeBox: duration,
            Acceptance: new[]
            {
                "Successfully authenticate with both systems",
                "Read data from source system",
                "Write data to target system",
                "Document API limitations and quirks",
                "Estimate effort for full integration"
            },
            Owner: "",
            Status: SpikeStatus.Planned,
            Outcome: null);
    }

    public static Spike PerformanceSpike(
        string component,
        string performanceGoal,
        TimeSpan duration)
    {
        return new Spike(
            Id: $"SPIKE-{DateTime.UtcNow:yyyyMMdd}-{Guid.NewGuid():N[..8]}",
            Title: $"Performance: {component} - {performanceGoal}",
            Question: $"Can {component} achieve {performanceGoal}?",
            Hypothesis: $"With appropriate optimization, {component} can meet {performanceGoal}",
            TimeBox: duration,
            Acceptance: new[]
            {
                $"Benchmark current {component} performance",
                $"Identify bottlenecks preventing {performanceGoal}",
                "Test optimization approaches",
                "Measure optimized performance",
                "Document path to production performance"
            },
            Owner: "",
            Status: SpikeStatus.Planned,
            Outcome: null);
    }
}

POC Design

POC Structure

public sealed record ProofOfConcept(
    string Id,
    string Title,
    string Objective,
    IReadOnlyList<string> Hypotheses,
    IReadOnlyList<POCScope> InScope,
    IReadOnlyList<string> OutOfScope,
    TimeSpan Duration,
    IReadOnlyList<POCMilestone> Milestones,
    IReadOnlyList<string> SuccessCriteria,
    IReadOnlyList<POCRisk> Risks,
    POCResources Resources,
    POCStatus Status);

public sealed record POCScope(
    string Feature,
    ScopeLevel Level,
    string Description);

public enum ScopeLevel
{
    Full,           // Complete implementation
    Partial,        // Key functionality only
    Simulated,      // Mocked/stubbed
    OutOfScope      // Explicitly excluded
}

public sealed record POCMilestone(
    string Name,
    DateOnly TargetDate,
    IReadOnlyList<string> Deliverables,
    MilestoneStatus Status);

public sealed record POCResources(
    IReadOnlyList<TeamMember> Team,
    decimal Budget,
    IReadOnlyList<string> Infrastructure,
    IReadOnlyList<string> ExternalDependencies);

POC Planning Checklist

public sealed class POCPlanningChecklist
{
    public IReadOnlyList<ChecklistItem> Items { get; } = new[]
    {
        // Objectives
        new ChecklistItem("Clear problem statement defined", Category.Objectives),
        new ChecklistItem("Success criteria are measurable", Category.Objectives),
        new ChecklistItem("Hypotheses are falsifiable", Category.Objectives),
        new ChecklistItem("Decision criteria for go/no-go established", Category.Objectives),

        // Scope
        new ChecklistItem("In-scope features clearly defined", Category.Scope),
        new ChecklistItem("Out-of-scope items explicitly listed", Category.Scope),
        new ChecklistItem("Scope is achievable within timebox", Category.Scope),
        new ChecklistItem("Dependencies identified", Category.Scope),

        // Resources
        new ChecklistItem("Team members assigned", Category.Resources),
        new ChecklistItem("Budget approved", Category.Resources),
        new ChecklistItem("Infrastructure/environment available", Category.Resources),
        new ChecklistItem("Access to required systems granted", Category.Resources),

        // Timeline
        new ChecklistItem("Duration is timeboxed", Category.Timeline),
        new ChecklistItem("Milestones defined with dates", Category.Timeline),
        new ChecklistItem("Review/demo points scheduled", Category.Timeline),
        new ChecklistItem("Extension/abort criteria defined", Category.Timeline),

        // Risks
        new ChecklistItem("Technical risks identified", Category.Risks),
        new ChecklistItem("Resource risks identified", Category.Risks),
        new ChecklistItem("Mitigation strategies defined", Category.Risks),

        // Exit Criteria
        new ChecklistItem("Success scenario defined", Category.Exit),
        new ChecklistItem("Failure scenario defined", Category.Exit),
        new ChecklistItem("Pivot criteria defined", Category.Exit),
        new ChecklistItem("Knowledge capture plan in place", Category.Exit)
    };
}

POC Scoping Matrix

public static class POCScopingMatrix
{
    /// <summary>
    /// Determine appropriate scope level for each feature in POC
    /// </summary>
    public static ScopeLevel DetermineScope(
        string feature,
        bool criticalToHypothesis,
        int implementationEffort,
        bool hasExistingAlternative)
    {
        // Critical to proving hypothesis: must be implemented
        if (criticalToHypothesis)
        {
            return implementationEffort <= 3 // days
                ? ScopeLevel.Full
                : ScopeLevel.Partial;
        }

        // Not critical but has existing solution: use it
        if (hasExistingAlternative)
            return ScopeLevel.Simulated;

        // Not critical and high effort: exclude
        if (implementationEffort > 5)
            return ScopeLevel.OutOfScope;

        return ScopeLevel.Simulated;
    }
}

Hypothesis-Driven Development

Hypothesis Structure

public sealed record Hypothesis(
    string Id,
    string Statement,         // "We believe that..."
    string Because,           // "Because..."
    string SuccessMetric,     // "We will measure..."
    string SuccessThreshold,  // "Success means..."
    HypothesisStatus Status,
    HypothesisResult? Result);

public enum HypothesisStatus
{
    Proposed,
    Testing,
    Validated,
    Invalidated,
    Inconclusive
}

public sealed record HypothesisResult(
    string ActualMetric,
    bool MetThreshold,
    string Evidence,
    string Implications,
    IReadOnlyList<string> NextHypotheses);

Hypothesis Templates

public static class HypothesisTemplates
{
    public static Hypothesis Performance(
        string component,
        string metric,
        string threshold)
    {
        return new Hypothesis(
            Id: $"H-PERF-{Guid.NewGuid():N[..8]}",
            Statement: $"We believe that {component} can achieve {threshold} {metric}",
            Because: $"Our requirements specify {threshold} {metric} and {component} documentation suggests this is achievable",
            SuccessMetric: metric,
            SuccessThreshold: threshold,
            Status: HypothesisStatus.Proposed,
            Result: null);
    }

    public static Hypothesis Integration(
        string sourceSystem,
        string targetSystem,
        string dataFlow)
    {
        return new Hypothesis(
            Id: $"H-INT-{Guid.NewGuid():N[..8]}",
            Statement: $"We believe that {sourceSystem} can {dataFlow} with {targetSystem}",
            Because: "Both systems expose APIs that appear compatible with our integration pattern",
            SuccessMetric: "Successful end-to-end data flow",
            SuccessThreshold: "Data transfers correctly without manual intervention",
            Status: HypothesisStatus.Proposed,
            Result: null);
    }

    public static Hypothesis Scalability(
        string system,
        int targetScale,
        string scaleUnit)
    {
        return new Hypothesis(
            Id: $"H-SCALE-{Guid.NewGuid():N[..8]}",
            Statement: $"We believe that {system} can scale to {targetScale} {scaleUnit}",
            Because: "Architecture is designed for horizontal scaling and vendor claims support this scale",
            SuccessMetric: $"Concurrent {scaleUnit} supported",
            SuccessThreshold: $"{targetScale} {scaleUnit} with acceptable latency",
            Status: HypothesisStatus.Proposed,
            Result: null);
    }
}

Experiment Design

Experiment Structure

public sealed record Experiment(
    string Id,
    ExperimentType Type,
    string Title,
    IReadOnlyList<Hypothesis> Hypotheses,
    ExperimentDesign Design,
    ExperimentTimeline Timeline,
    ExperimentResources Resources,
    IReadOnlyList<ExperimentRisk> Risks,
    ExperimentStatus Status);

public sealed record ExperimentDesign(
    string Approach,
    IReadOnlyList<string> Variables,
    IReadOnlyList<string> Controls,
    string MeasurementMethod,
    string AnalysisPlan);

public sealed record ExperimentTimeline(
    DateOnly StartDate,
    DateOnly EndDate,
    TimeSpan Timebox,
    IReadOnlyList<Checkpoint> Checkpoints);

public sealed record Checkpoint(
    string Name,
    DateOnly Date,
    string Purpose,
    IReadOnlyList<string> DecisionPoints);

Experiment Lifecycle

public sealed class ExperimentLifecycle
{
    public async Task<ExperimentResult> Execute(Experiment experiment)
    {
        // 1. Setup
        await Setup(experiment);

        // 2. Execute with checkpoints
        foreach (var checkpoint in experiment.Timeline.Checkpoints)
        {
            var progress = await ExecuteUntilCheckpoint(checkpoint);

            // Evaluate at each checkpoint
            var decision = await EvaluateCheckpoint(checkpoint, progress);
            if (decision == CheckpointDecision.Abort)
            {
                return ExperimentResult.Aborted(
                    "Experiment aborted at checkpoint",
                    progress.Findings);
            }
            if (decision == CheckpointDecision.Pivot)
            {
                await AdjustExperiment(experiment, progress.Learnings);
            }
        }

        // 3. Analyze results
        var analysis = await AnalyzeResults(experiment);

        // 4. Document learnings
        await DocumentLearnings(experiment, analysis);

        // 5. Make recommendation
        return GenerateResult(experiment, analysis);
    }
}

public enum CheckpointDecision
{
    Continue,   // Proceed as planned
    Adjust,     // Minor course correction
    Pivot,      // Major direction change
    Abort       // Stop experiment
}

POC Evaluation

Evaluation Framework

public sealed record POCEvaluation(
    string POCId,
    DateOnly EvaluationDate,
    IReadOnlyList<HypothesisEvaluation> HypothesesResults,
    TechnicalEvaluation Technical,
    OperationalEvaluation Operational,
    IReadOnlyList<string> Strengths,
    IReadOnlyList<string> Weaknesses,
    IReadOnlyList<string> Uncertainties,
    POCVerdict Verdict,
    IReadOnlyList<string> NextSteps);

public sealed record HypothesisEvaluation(
    string HypothesisId,
    HypothesisStatus Result,
    string Evidence,
    double Confidence); // 0-1

public enum POCVerdict
{
    Proceed,            // Full implementation recommended
    ProceedWithCaution, // Proceed but address identified issues
    ExtendPOC,          // Need more investigation
    Pivot,              // Different approach needed
    Abandon             // Concept not viable
}

public sealed class POCEvaluator
{
    public POCVerdict Evaluate(POCEvaluation evaluation)
    {
        var hypothesesPassed = evaluation.HypothesesResults
            .Count(h => h.Result == HypothesisStatus.Validated);
        var hypothesesTotal = evaluation.HypothesesResults.Count;
        var passRate = (double)hypothesesPassed / hypothesesTotal;

        var technicalOk = evaluation.Technical.Rating >= TechnicalRating.Acceptable;
        var operationalOk = evaluation.Operational.Rating >= OperationalRating.Feasible;

        return (passRate, technicalOk, operationalOk) switch
        {
            (>= 0.8, true, true) => POCVerdict.Proceed,
            (>= 0.6, true, true) => POCVerdict.ProceedWithCaution,
            (>= 0.4, true, _) => POCVerdict.ExtendPOC,
            (>= 0.4, false, _) => POCVerdict.Pivot,
            _ => POCVerdict.Abandon
        };
    }
}

Knowledge Capture

Learning Documentation

public sealed record ExperimentLearnings(
    string ExperimentId,
    DateOnly Date,
    IReadOnlyList<KeyLearning> Learnings,
    IReadOnlyList<TechnicalDiscovery> TechnicalDiscoveries,
    IReadOnlyList<string> Surprises,
    IReadOnlyList<string> WhatWorked,
    IReadOnlyList<string> WhatDidnt,
    IReadOnlyList<Recommendation> Recommendations,
    IReadOnlyList<OpenQuestion> RemainingQuestions);

public sealed record KeyLearning(
    string Topic,
    string Learning,
    LearningType Type,
    string Evidence,
    string Implications);

public enum LearningType
{
    Technical,      // How technology works
    Architectural,  // Design patterns/approaches
    Operational,    // How to run/maintain
    Process,        // How to work effectively
    Domain          // Business/domain knowledge
}

Workflow

When planning experiments:

  1. Identify Uncertainty: What don't we know that we need to know?
  2. Formulate Hypotheses: What do we believe? How will we test it?
  3. Select Experiment Type: Spike, POC, Prototype, or Pilot?
  4. Define Scope: What's in/out? What's the timebox?
  5. Plan Execution: Milestones, checkpoints, resources
  6. Execute with Checkpoints: Evaluate progress at each checkpoint
  7. Analyze Results: Did we validate/invalidate hypotheses?
  8. Document Learnings: Capture knowledge for future use
  9. Make Decision: Proceed, pivot, or abandon

References

For detailed templates:


Last Updated: 2025-12-26

From the file to a first result

The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.

View the source and supporting files

This download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.

1. Download the file

Download SKILL.md

From the root of a test project, save the file as .skill-downloads/poc-planning-mrwakb85/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.

Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.

mkdir -p '.skill-downloads/poc-planning-mrwakb85' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/poc-planning-mrwakb85/download' --output '.skill-downloads/poc-planning-mrwakb85/SKILL.md.part' && mv '.skill-downloads/poc-planning-mrwakb85/SKILL.md.part' '.skill-downloads/poc-planning-mrwakb85/SKILL.md'

2. Check prerequisites

Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.

Tools declared by the author (check availability in your agent): Read, Glob, Grep, Write, Edit

No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.

The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.

3. Load the skill

After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.

Claude Code
test -f '.skill-downloads/poc-planning-mrwakb85/SKILL.md' && test -s '.skill-downloads/poc-planning-mrwakb85/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/poc-planning' && cp -R '.skill-downloads/poc-planning-mrwakb85' '.claude/skills/poc-planning'

OpenSkills

OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.

Official OpenSkills installation
openskills install './.skill-downloads/poc-planning-mrwakb85'

openskills read 'poc-planning-mrwakb85'

Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.

For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.

openskills sync

Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.

4. Try a first task

Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:

Read .skill-downloads/poc-planning-mrwakb85/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.

Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.

Related skills