Prototyping Principles
A library of principles that I currently use in my prototypes.
This is a set of principles that I currently use as context for prototyping and also aligns very well with my personal design philosophy.
Overall Philosophy : File Over App
A core belief of mine that guides most of it is that your data / context should outlive any application.
Your data lives in plain, human-readable files you own, not locked in proprietary databases or cloud platforms.
What this means:
1. Your files, your rules
- Data stored in markdown, yaml, json, svg, etc.
- No proprietary formats, no vendor lock-in
- Open with any text editor, today or in 20 years
2. Local first, always
- Works completely offline (no servers required)
- No account creation, no login walls
- Your computer your data, your privacy
3. Folder-first workflow
- Apps or agents ask for a folder before operating
- You choose where data lives (not the app or agent)
- Easy to backup, sync, or version control
4. Universal Metadata
- Consistent schema across all content types
- Machine-readable for tooling
- Human-readable for transparency
Core Principles
Data Sovereignty
You must have complete control over your data / context.
Applications come and go, but your data / context should be permanent. When you own the format, you unlock actual potential.
Privacy by Design
Privacy is not a feature. It is about more than just privacy. It’s about power.
Your thoughts, notes, research, insights, concepts are yours alone. Privacy should never be negotiable or optional. Privacy by default is true empowerment[1].
Transparency
You should understand exactly what an app or agent does.
Trust comes from understanding. When you can see excatly what's happening, you'r in control.
Interoperability
Data should flow flow freely between applications / agents.
Lock-in happens when data can't escape. True interoperability means never being trapped. And allows you to build other systems, apps, agent on top.
Simplicity
The simplest solution that works is the best solution.
Complexity is a form of technical debt. Simple systems while often incomplete are more maintainable, debuggable, and have a higher chance to be timeless.
Off-line First
The internet should be optional, not required.
Internet access is not universal. Critical tools must work everywhere, always.
Composability
Composable tools create emergent value.
Small focused tools that work together are better than than monolithic apps.
Agency
Users should control their directions, not follow prescribed paths.
Every user is different, and needs evolve and change over time. Rigid workflows create friction for everyone.
Longevity
Build for the long term, not the next quarter.
Critical tools / interfaces (APIs, Smart Contracts) we depend on should be reliable for years, not days.
Software Design Principles
Minimize, Don't Maximize
Build features that reduce complexity, not add it.
Good features:
- Remove friction from common repeated tasks
- Clarify unclear concepts
- Automate tedious work
- Surface hidden connections
Bad features:
- Add complexity without clear value
- Lock users into specific workflows
- Create dependencies on external services
- Hide what's happening behind abstraction
Progressive Enhancement
Start with the essential, add layers of capability.
- Core: Works with plain markdown and text editor
- Enhanced: Rich UI when using the application
- Advanced: AI assistance, visualizations, automation
Every layer adds value, but the foundation remains accessible.
Calm Technology
Technology should be ambient, not demanding.
- Non-blocking notifications
- Subtle status indicators
- Auto-save without interruption
- Pause when not in focus
Respect for Craft
Software/Design is craft. Quality matters.
- Clean, readable code
- Comprehensive error handling
- Thoughtful UX details
- Documentation as priority, not afterthought
- *Privacy is, ... , a way for users to regain control.* Inspired by past work between Mozilla and IDEO exploring the State of the Surveillance Economy ↩