Experiment
Dwelling as Conversion
From Assessment to Progressive Erasure
╔═══════════════════════════════════════════════════════════════════╗ ║ DWELLING AS CONVERSION: EVOLUTION ║ ║ ║ ║ Phase 1: Active Dwelling Phase 2: Contemplative ║ ║ ┌─────────────────────────┐ ┌───────────────────────────┐ ║ ║ │ Q1: Accumulating? │ │ "We help businesses..." │ ║ ║ │ Q2: Would remove? │ ──► │ ↓ scroll │ ║ ║ │ Q3: What's stopping? │ │ "We remove what obscures" │ ║ ║ └─────────────────────────┘ └───────────────────────────┘ ║ ║ ║ ║ User reflects on questions User observes erasure ║ ║ Insight from their answers Message distills through ║ ║ subtraction ║ ║ ║ ║ Both achieve Zuhandenheit: the tool recedes ║ ╚═══════════════════════════════════════════════════════════════════╝
Evolution
This experiment documents two approaches to the same insight: conversion is dwelling continued. Phase 1 used interactive assessment—questions that invited reflection. Phase 2 uses progressive erasure—a scroll-driven animation where the medium embodies the message. Both achieve Zuhandenheit through different modes of engagement.
The Problem: Conversion as Interruption
The data told a clear story. Of 174 visitors to the agency homepage, only 21 clicked through to the contact page (5.6%). Of those, only 3 submitted the form. Meanwhile, experiments on .space and .io held attention—users explored, scrolled, engaged.
The pattern was revealing: users who arrived at .agency from experiments didn't convert—they navigated to .ltd seeking philosophical grounding. They wanted to understand before they bought. The sales page interrupted their dwelling.
Heideggerian Diagnosis: Vorhandenheit
In Heidegger's terms, the agency homepage was present-at-hand (Vorhandenheit)—it announced itself as a sales mechanism rather than receding into transparent use. The visitor became aware of being sold to. The tool became conspicuous.
""
The experiments on .space embody the opposite: ready-to-hand (Zuhandenheit). Users explore the Threshold Dwelling visualization, test the Motion Ontology tools, run the Triad Audit—and in doing so, they're already experiencing what CREATE SOMETHING builds. The tool recedes; insight emerges.
The agency homepage broke this pattern. Instead of continuing the dwelling experience, it demanded a mode switch: stop exploring, start deciding. The result? Users bounced to .ltd for more exploration rather than converting.
Phase 1: Assessment as Active Dwelling
Our first insight: the fix wasn't better copy—it was recognizing that conversion is dwelling continued. Instead of asking users to switch from exploration to transaction, we built an interactive assessment that applies the Subtractive Triad to the visitor's own business. The user reflects; insight emerges from their answers.
What's obscuring your business?
The three questions mirror the three levels of the Subtractive Triad. Q1 identifies what is accumulating (implementation, artifact, or system-level). Q2 applies Rams' test: "What would you remove if there were no consequences?" Q3 connects back to the whole: "What's stopping you?"
Implementation: The Hermeneutic Circle in Code
The assessment is itself an application of the Subtractive Triad. We adapted patterns from the experiment runtime components on .space, applying DRY at the implementation level.
The Recommendation Engine
// Q1 options map to triad levels
const accumulatingOptions = [
{ id: 'tech_debt', label: 'Technical debt', triad: 'implementation' },
{ id: 'process_sprawl', label: 'Process sprawl', triad: 'artifact' },
{ id: 'feature_creep', label: 'Feature creep', triad: 'artifact' },
{ id: 'decision_paralysis', label: 'Decision paralysis', triad: 'system' },
{ id: 'disconnected_systems', label: 'Disconnected systems', triad: 'system' },
{ id: 'manual_tasks', label: 'Manual repetitive tasks', triad: 'implementation' }
];
// Q3 options map to services
const blockerOptions = [
{ id: 'uncertainty', label: "Uncertain about impact", service: 'advisory' },
{ id: 'resistance', label: 'Organizational resistance', service: 'transformation' },
{ id: 'where_to_start', label: "Don't know where to start", service: 'automation' },
{ id: 'bandwidth', label: 'No internal bandwidth', service: 'partnership' },
{ id: 'complexity', label: 'Technical complexity', service: 'agentic-systems' },
{ id: 'web_first', label: 'Need web presence first', service: 'web-development' }
];Each question's options encode domain knowledge. The recommendation isn't random—it emerges from the intersection of what's accumulating (the problem domain) and what's blocking removal (the intervention type).
Linking Assessment to Contact
// When user completes assessment, they're directed to contact
// with assessment context preserved
const contactUrl = `/contact?service=${result.recommendation.service}&assessment=${sessionId}`;
// Contact form shows:
// "Based on your assessment, we recommend {service}"
// On contact submission, assessment is marked as converted
await db.prepare(
`UPDATE assessment_responses SET converted_to_contact = 1 WHERE session_id = ?`
).bind(assessmentId).run();Phase 1 Insight: Dwelling Through Questions
The crucial insight behind the assessment was that asking questions is dwelling. When a user answers "What are you accumulating?" they're not being interrogated—they're being invited to reflect. The assessment becomes a mirror, and in that mirror, the user sees their own situation more clearly.
""
This is why the assessment works where static copy failed. Static copy tells the user what they should want. The assessment asks what they're experiencing. The difference is the difference between Vorhandenheit (object to be convinced) and Zuhandenheit (tool for self-understanding).
The assessment components (AssessmentRuntime, AssessmentStep, InsightReveal)
remain in the codebase for potential future use—particularly for visitors who enter via specific service pages
and want a deeper engagement. But for the homepage, we discovered something even more aligned with our philosophy.
Phase 1 Analytics
The assessment implementation tracked timing and conversion without interrupting the experience:
CREATE TABLE assessment_responses (
session_id TEXT NOT NULL,
accumulating JSON, -- Q1 selections
removal_insight TEXT, -- Q2 free text
blockers JSON, -- Q3 selections
recommended_service TEXT,
triad_level TEXT,
time_on_q1_ms INTEGER,
time_on_q2_ms INTEGER,
time_on_q3_ms INTEGER,
total_time_ms INTEGER,
converted_to_contact INTEGER DEFAULT 0
);This allowed us to measure not just if users converted, but how they dwelt. Which questions took longest? Which answers correlated with conversion? The assessment generated data for refinement.
Phase 2: Progressive Erasure
While building the assessment, we realized something: we were asking users about subtraction when we could show them. The most CREATE SOMETHING way to tell the subtraction story is through text that subtracts itself.
The TextRevelation component implements this in five phases:
Implementation: Words as Data
The key insight was treating words as data with a keep property:
Word Configuration
const words = [
{ text: 'We', keep: true },
{ text: 'help', keep: false },
{ text: 'businesses', keep: false },
{ text: 'identify', keep: false },
// ...corporate fluff marked keep: false...
{ text: 'remove', keep: true },
{ text: 'what', keep: true },
{ text: 'obscures.', keep: true }
];
// Scroll progress drives phase transitions
let phase = $derived(
scrollProgress < 0.1 ? 'reading' :
scrollProgress < 0.35 ? 'striking' :
scrollProgress < 0.5 ? 'fading' :
scrollProgress < 0.85 ? 'coalescing' : 'complete'
);Each word calculates its own strike and fade progress based on scroll position. Words marked keep: false get a strikethrough that grows from left to right, then fade out entirely.
The kept words remain, growing bolder as the message distills.
Per-Word Animation
{#each words as word, i}
{@const wordStrike = (strikeProgress - i * 0.03) / 0.3}
{@const wordFade = word.keep ? 1 : 1 - fadeProgress}
<span
class="word"
class:keep={word.keep}
class:hidden={!word.keep && phase === 'complete'}
style="--strike: {wordStrike}; --fade: {wordFade};"
>
{word.text}
{#if !word.keep}
<span class="strike"></span> // CSS width: calc(var(--strike) * 100%)
{/if}
</span>
{/each}From Asking to Showing
The evolution from assessment to TextRevelation represents a deeper understanding of the principle:
""
The assessment asked about subtraction. The TextRevelation demonstrates it. The medium becomes the message—not as decoration but as meaning. Understanding comes through observation, not interrogation.
The Meta-Application
There's a recursive elegance here. The Subtractive Triad was developed to guide our work. Now it's being used as the content of a conversion tool. The framework that helps us build things is the same framework that helps prospective clients understand what they need.
This is what it means for the hermeneutic circle to complete: the philosophy (.ltd) informs the research (.io), which validates the practice (.space), which applies to service delivery (.agency), which tests and evolves the philosophy.
Conclusion: The Journey of Subtraction
The evolution from assessment to TextRevelation is itself an application of the Subtractive Triad. We started with a full assessment—three questions, recommendation engine, analytics schema. We ended with a single scroll experience that shows what we do by doing it.
Both approaches achieve Zuhandenheit. The assessment invites active reflection—users think about their own situation. The TextRevelation invites contemplative observation—users witness subtraction in action. Both cause the conversion mechanism to recede; both reveal something static copy never could.
The lesson: "Less, but better" applies not just to artifacts, but to how we communicate. Sometimes asking is the right mode. Sometimes showing is. The hermeneutic circle completes when we let research inform implementation, implementation inform refinement, and refinement deepen research.