Build 80%, Let Users Shape the Last 20% | ShapeKit

There's a design principle in the best SaaS products that rarely gets articulated explicitly: the product defines what's fixed, and users fill in what's flexible.

You see it in the tools that have aged well. Notion lets you define page structure, but users decide how they organize their workspace. Linear gives you issue states, but teams configure the workflow. GitHub sets the code review model, but teams decide their own branch policies.

None of these products try to do everything. They define a shape and let users work within it.

What 80/20 looks like in practice

The 80% you build:

The 20% users shape:

Users don't need to shape the data model. They don't need to define what's available. They just need to adjust the view to fit how they actually work.

This sounds obvious. The reason it's not the default is that most developers conflate "configurable" with "flexible." They're not the same.

Why "configurable" isn't the same as "flexible"

A configurable dashboard gives users knobs to turn. A flexible dashboard lets users define what the knobs do.

The first is manageable. The second is a platform.

Most teams who try to build "flexible" dashboards end up with one of two outcomes:

Outcome A: The configuration UI becomes its own product. Weeks of work building a drag-and-drop layout editor, a column visibility manager, a filter builder. When you're done, you've built a secondary product that competes with your primary product for attention.

Outcome B: The configuration system becomes a source of bugs. Users configure themselves into broken states. Support gets calls about "the dashboard looks wrong." Developers spend time debugging configurations they didn't write.

The 80/20 model avoids both by keeping the flexibility bounded. You define the shape space. Users fill it in. You never let users step outside the bounds, because the bounds are enforced in the code, not by user discipline.

The implementation gap

Here's why developers don't build this by default: the tools for enforcing shape constraints don't exist as a package.

You can find UI libraries for table configuration. You can find state management solutions for storing preferences. What you can't find out of the box is:

This is the gap ShapeKit fills. You define the shapeable skill — the declaration of what's fixed and what's optional. ShapeKit handles the rest: the storage, the constraints, the user-facing reshape panel, the multi-tenant scoping.

The developer experience

Without this model, building user-configurable dashboards requires writing the same infrastructure code every time. Schema for user preferences. Authorization logic for who can configure what. Frontend components for the configuration UI. Sync logic for when the underlying data model changes.

You're not building a dashboard. You're building a customization platform on top of your dashboard.

With a constrained shaping model, you declare what's shapeable and ship. Users see a configuration panel that reflects exactly what you've made available. They can't break anything you haven't already approved as breakable.

Build 80%. Let users shape the last 20%.

ShapeKit launches April 15 — full product, no waitlist. Sign up for early access.


Coming soon: The Crafter/Shaper model — why we split the dashboard role in two (publishing April 7).