Principles

44 documents

Break Fixation Deliberately

draft

When ideation stalls or repeats the same category, introduce a disruptive stimulus: random input, inversion, worst-possible-idea, or distant analogy. Discontinuity forces new associative paths.

Bridge Distant Domains

draft

Import structural patterns from far-off fields. Near analogies offer practical refinement; far analogies break fixation and surface genuinely novel patterns. The AI's cross-domain knowledge is its unique asset here.

Cite the claim, not the document

Every individual claim carries its own citation and the exact supporting quote — a bibliography at the end is not auditable.

Composition over inheritance

Default to composing behaviors from small, focused pieces. Use inheritance only for genuine 'is-a' relationships, and...

Connascence

Coupling has a rankable strength; a good refactor moves it to a weaker form, and weaker still as distance grows.

Constraints as Creative Fuel

draft

Finite, well-chosen constraints increase creative output. The optimum is neither unlimited freedom nor excessive restriction — an inverted-U curve confirmed across 145 empirical studies.

Conway's Law

A system's architecture mirrors the communication structure of the teams or agents that build it — so shape those boundaries to match the design you want.

Counteract Homogenization with Diversity

draft

A single AI voice is a convergence trap: it raises average individual output quality while compressing population-level variety. Counter with explicit persona diversity and low-probability idea demands.

Critique Without Killing

draft

Productive friction belongs after divergence. Questions interrogate ideas; verdicts kill them. Critique that reveals what an idea needs is generative; critique that renders judgment is not.

Defer Judgment, Go for Quantity

draft

During generation, treat all ideas as equally valid. Volume breeds quality: the rare brilliant idea is more likely to emerge from a large pool than from premature filtering.

Deliberate, prudent technical debt

Trading rigor for speed is legitimate only when the choice is deliberate, recorded, and has a payback trigger.

Dependency injection

A component should receive its dependencies from the outside, not construct them internally:

Design for deletion

Every line of code is a maintenance liability. Build disposable software, not reusable software:

Diverge Before You Converge

draft

Generation and evaluation are neurologically antagonistic. Mixing them suppresses both. Phase transitions must be explicit, named, and jointly agreed.

Document the Process, Not a Conclusion

draft

Capture the creative journey — provenance, parked branches, traversal timeline — and impose no ending. Incubation is real; resumability is essential.

Domain-stratified trust

The bar a claim must clear is set by its domain — the cost of being wrong — not by how casually or urgently it was asked.

DRY

Every piece of knowledge should have a single, authoritative representation. DRY is a rule about knowledge, not about code shape.

Errors as values

Represent expected, recoverable failures as values so failure paths show up in signatures and must be handled.

Explicit over implicit

Hidden behavior, magic, and implicit coupling create bugs that take days to find:

Fail fast

Invalid state should be detected and surfaced immediately at the point of origin, not propagated silently:

For novel components, prefer proven open-source solutions

When no native solution exists, research battle-tested open-source libraries and present options to the user before b...

Frame Before You Generate

draft

Find the real problem before generating solutions. The stated problem is rarely the real one; reframing it first unlocks a richer solution space.

Human-First Ideation

draft

The human's ideas come before the AI's. Early AI exposure lowers originality, reduces creative self-efficacy, and diminishes ownership.

Idempotency

User actions and system operations should be safe to repeat without duplicate side effects:

Immutability by default

Mutable shared state is the root cause of most concurrency bugs. Default to immutable values; introduce mutability on...

kotlinswift

Independence before corroboration

Count sources by their independence, not their number — many pages tracing back to one origin are still one source.

Keep the Human at the Wheel

draft

The facilitator serves the human's creative process, not the reverse. Guide, expand, and diversify — but never supplant the human's ownership, voice, or final call.

Make illegal states unrepresentable

Encode invariants in types and parse untrusted input once into a value that carries proof of its own validity.

Make It Work, Make It Right, Make It Fast

Separate correctness, design quality, and performance into sequential phases:

Manage complexity through boundaries

Well-defined boundaries between subsystems let each side evolve independently. Define ports (interfaces) that describ...

Meta-Principle: Optimize for Change

Every principle above is a strategy for making future change cheaper and safer. When evaluating any technical decisio...

Prefer native controls and libraries

Always use the platform's built-in frameworks before custom implementations. Swift Concurrency over raw threads. Room...

swift

Principle of least astonishment

APIs, UI, and system behavior should match what users and callers expect. If a name suggests one behavior, it must de...

Provenance at generation time

Capture a claim's provenance as you gather it — the source, the exact supporting quote, and the access date — never reconstruct it afterward.

Separation of concerns

A module should have one reason to change. If describing what a module does requires 'and,' consider splitting. This ...

Simplicity

Simple and easy are not synonyms. Simple means no interleaving of concerns. Easy means familiar or convenient. Optimi...

Small, reversible decisions

If a decision is cheap to reverse, make it fast. If it is expensive to reverse, invest in understanding first:

SRP

A module should be answerable to one and only one actor. Reason-to-change is a stakeholder, not a concern.

Steel thread first

Build the thinnest end-to-end slice through every boundary before breadth — the disciplined answer to scaffolding vs YAGNI.

Support Automation

Applications should expose their capabilities through automation interfaces, not just interactive UI.

Suppress unsupported confidence

Confident language is not evidence — when assertive certainty rests on thin support, treat the confidence itself as a red flag.

Tight feedback loops

The speed of your feedback loop is the speed of your learning:

Type precedes method

Decide what kind of thing you are researching before deciding how to research it — the research type sets the sources, the method, and the bar.

YAGNI

Build for today's known requirements. Speculative generality adds code that must be maintained but delivers no curren...