8 minute read

This post is for engineers who’ve ever been handed a vague idea and told to “just build something.” You know the type: a hallway conversation, no ticket, no design — just vibes and urgency.

In this post, I’ll show you how to take that kind of chaos and turn it into a spec you can actually build from.

By the end of this post, you’ll learn how to:

  • Translate a vague ask into a real spec
  • Avoid the common traps of premature architecture
  • Set yourself up to lead, not just execute

The Ambiguity Trap

Imagine this: you’ve just joined SuperNova Corp, the galaxy’s fastest-growing interplanetary workplace platform. Think Slack meets Starfleet.

It’s your first week on Titan Station. You’re still adjusting to low-gravity cafeteria trays, badges you can’t seem to swipe right the first time, and the distinct smell of recycled air.

One morning, sleepy-eyed and caffeine-starved, you find yourself at the Nutrient Dispenser chatting with a Director from the PED org. They’re venting: “Nobody knows what tools we have. Every team has their own list — buried in Slack, dead Confluence pages, or worse: someone’s memory.”

You nod. This isn’t a new problem — just a new galaxy.

There’s no formal ask. No Jira ticket. No Figma file. Just friction. But it’s enough. You offer to explore.

The only catch?

“If you can make something quick and useful, go for it. We just can’t afford a full product cycle.”

You know the trap: it sounds “simple” — a list of internal tools. Maybe a featured one. A few categories. But you’ve been around long enough to know this is where tech debt is born.

You grab 30 minutes with the PM and the lead designer over lunch. They’re swamped, but supportive. You agree on one thing:

Whatever you build should be small, testable, and clear enough that any new hire could open it and immediately understand what it’s for.

  • No full product cycle
  • No hi-fi mocks

But enough alignment to write a shared spec.

Before writing anything, you start talking. You loop in a couple ICs from Infra and DevTools who each mention their own “secret” tool lists.

You ask a designer if there’s any prior exploration — turns out there’s a dead Figma file from 8 months ago. Slowly, a pattern emerges. Not a feature request — a symptom of poor discoverability. Only after these conversations do you start framing a spec.

You don’t open Xcode. You open a blank markdown file. Because building good systems starts with writing a good spec.

Why Specs Matter (Even for MVPs)

Jumping into code too early feels productive — until it isn’t. That “quick win” turns into house of cards, UI hacks, and half-baked logic glued together by TODO comments and wishful thinking.

You’ve seen this movie. A vague idea becomes a real feature. That feature becomes a legacy. Suddenly, the team’s stuck rewriting something nobody really understood in the first place.

Suddenly, your cute little “fix-it” app is running in production on a freighter with 500 users — and nobody remembers who added the /tools?legacyMode=true flag.

So what do you do? You pause. You define. Not because you love process, but because clarity is cheaper than cleanup.

In this case, what started as a hallway gripe about “finding tools” turned into something bigger:

How does a fast-moving org surface internal knowledge without chaos?

This wasn’t just a feature request. It was a symptom of scale — a discovery problem pretending to be a UI problem.

Breaking Down the Problem

At first glance, it sounded simple.

“Just show the tools we have. Maybe highlight one. Keep it lightweight.”

But vague inputs hide complexity. And without definition, you end up solving the wrong problem well — or the right problem poorly.

You start mapping what you actually heard versus what was said. Somewhere between the half-baked Figma and the Slack venting, a pattern starts to form. You sketch it out — not as features, but as design constraints.

So you reframe.

You pull the scattered conversations into a rough spec. Nothing fancy. Just a clear articulation of what this MVP is, what it isn’t, and what assumptions you’re quietly betting on.

You consider calling it the “Galactic Tool Index,” but decide clarity wins over branding.

Category Reframed Thinking
Goal • Let employees browse company-approved internal tools by category
• Highlight the most used or most helpful tool on app launch
Non-Goal • No admin-facing editing or tool creation flows (for now)
• No personalization, auth, or role-based logic
Assumption • Tools are static and curated — not pulled dynamically (yet)
• Metadata like name, team, and summary is reliable enough to ship
Constraint • Should be buildable solo, in a short, focused iteration

Some of this gets debated (maybe some of it was even pretty heated 😜). A few parts change after chatting with the PM, Designer, and Backend Lead. But the act of writing it down makes the scope real — and defensible.

So what does that look like in practice?

Anatomy of a Lean Product Spec

You’re not writing a BRD. You’re not diagramming a moonshot. You’re giving just enough shape to avoid chaos — and still ship fast.

By this point, you’re no longer guessing. You’ve got enough shared context to sketch a real system — not a wishlist.

Here’s how you structure it:

Section Purpose
Overview • Frame the problem
• Explain why it matters now
Goals • Define MVP deliverables
• Focus on must-haves, not maybes
Non-Goals • Set clear boundaries
• List what’s explicitly out of scope
Assumptions • Document key bets
• Flag potential future issues
Features • List prioritized build items
• Note known risks per feature
Edge Cases • Identify potential surprises
• Prevent future bug tickets
UX Decisions • Outline display logic
• Document key tradeoffs
Risk Table • Surface uncertainties
• Make risks explicit

You even leave room for the future — a placeholder API contract for v2, a section of TODOs for metrics and CMS tooling later. No yak-shaving now. Just enough structure to move fast without backtracking.

We debated whether teams should define their own “categories.” Decided to hardcode in v1 — less schema creep, easier grouping.

MVP Wireframe (Lo-fi Example)

Once the spec was locked, you sketched a quick flow to gut-check it.

No Figma. No design sprint. No holographic UX review with the Martian stakeholders. Just enough visual clarity to get alignment and move fast.

+--------------------------------------------------+
|            SuperNova Tool Catalog               |
+--------------------------------------------------+

🔍 Featured Tool
----------------------------------------------------
| API Gateway Dashboard                            |
| Team: Infra                                      |
| Summary: Entry point to view and monitor APIs    |
----------------------------------------------------

📂 Department: Infra

- API Gateway Dashboard
- Metrics Explorer
- Alert Configuration Tool

📂 Department: DevTools

- Onboarding CLI
- PR Health Bot
- Coverage Tracker

📂 Department: HR & Admin

- PTO Portal
- Expense Reimbursement App

It’s not flashy — but it’s obvious what this app does. Any new hire should be able to open it and figure it out in 30 seconds. That’s the bar.

Backend Alignment (Even Without a Backend)

Even without a backend, you can still get alignment. Even without an API, you plan like there is one.

Just like before — no code yet. You walk through the spec first, then stub out a shared contract. You loop in the Backend Lead and walk through the spec and create a shared contract. You stub out a simulated delay. You abstract the data layer.

You even simulate a fetch delay — not just for realism, but to force the UI to handle real-world latency from day one.

Because the fastest way to build v2 later is to make v1 not fight it. One endpoint: GET /tools. One payload shape. One less surprise down the road.

No telemetry beacons. No real-time sync. Just a clean contract you won’t regret at warp speed.

{
  "tools": [
    {
      "id": "api-gateway",
      "name": "API Gateway Dashboard",
      "team": "Infra",
      "summary": "Entry point to view and monitor APIs",
      "category": "Infrastructure",
      "isFeatured": true
    },
    ...
  ]
}

This isn’t about premature scaling. It’s about reducing friction when v2 arrives.

You don’t need telemetry or CMS flags yet — just a schema everyone agrees on. That one conversation now saves three weeks of rework later.

Even mocked data deserves a real interface.

Why This Matters

Specs aren’t red tape. They’re relief. They’re how you shrink chaos into something buildable — without waiting for a product brief or perfect alignment.

When you define the edges early, you free the team to focus on what actually matters: shipping something small, clear, and usable — without planting future landmines.

This wasn’t a big bet. It was a scoped experiment. But you treated it like a real system, because that’s what scales.

  • Specs aren’t bureaucracy — they’re clarity
  • You can’t architect what you haven’t defined
  • And here’s the part most folks miss: vague problems are actually your chance to lead — without waiting for permission.

Anyone can write code. Leaders write specs.

Artifact Download

Want to see the full spec? This isn’t a cleaned-up template — it’s the real markdown doc from this case study.

You can download the full Product Spec and API Contract Sketch.

Use it as a starting point for your own POCs, MVPs, or internal tools.

Next Steps

This is part one in a series of 4 on Designing for Ambiguity.

Next, I’ll walk through how I turn a spec like this into something architectural — without jumping straight to code.

I’ll share how I go from vague ideas to aligned systems: sketching structure, scoping risk, and figuring out what’s actually worth building.

You can follow the series or star the repo here: designing-for-ambiguity.

Next Up: Decisions Before Code (coming soon)