Skip to content

Commit c25fed9

Browse files
authored
Merge pull request #25 from nubank/docs/2yearvision
Docs/2yearvision
2 parents 4001d8b + 8d92887 commit c25fed9

File tree

1 file changed

+120
-0
lines changed

1 file changed

+120
-0
lines changed

docs/2026vison.md

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
# ClojureDocs: Two-Year Vision (2026–2028)
2+
3+
> Make ClojureDocs the highest-signal, REPL-native, community-connected documentation system in the programming ecosystem.
4+
5+
---
6+
7+
## What does success look like?
8+
9+
Examples on ClojureDocs are accurate, executable, and written by real practitioners. Every example runs — if it doesn't execute correctly against the documented var, it is structurally rejected, not manually moderated. Contributors are known community members, and every contribution carries visible quality signals: authorship, freshness, and engagement. AI-generated slop doesn't survive contact with the verification pipeline. People trust what they read because the system earns that trust through enforcement, not curation alone.
10+
11+
The data model is explicit, documented, and separated from business logic. Adding a new feature — a scoring system, a REPL widget, a new library — does not require understanding the entire codebase. Contributors ship improvements without fear of breaking unrelated functionality. The architecture supports multi-library documentation, not just `clojure.core`. The system is AI-legible: loosely coupled, well-contracted, and independently testable — qualities that make it safe for both human and agentic contributors.
12+
13+
ClojureDocs is a hub between dialects. Clojure, ClojureScript, babashka, jank — the ecosystem is no longer one language on one runtime. Documentation that surfaces where behavior is shared and where it diverges makes the whole ecosystem more navigable. By connecting vars to cross-dialect test suites and marking dialect compatibility, ClojureDocs helps grow the ecosystem by making it easier to move between dialects and adopt new ones.
14+
15+
Every var page has an embedded REPL. Examples are executable — input and output are visible, and users can modify and re-run them in place. This is not just a convenience. In a world where AI tools threaten to eliminate the repetition necessary to build skills, the REPL is where developers put in the reps. Learning Clojure on ClojureDocs is active, not passive learning. The gap between "reading about a function" and "using a function" is eliminated.
16+
17+
Docs are not a dead end. Each var and namespace is a hub connecting to blog posts, talks, GitHub usage, mob programming sessions, and pairing opportunities. Engineers discovering a function or a library also discover the humans and resources around it. ClojureDocs is an entry point into the Clojure community, not a static reference page.
18+
19+
Decisions are data-driven from quantitative and qualitative sources. Analytics tell us which pages matter, which are dead, and where users drop off. User interviews give us insight to how people are using the site and features that would help them use it more.
20+
21+
ClojureDocs implementation exeplifies modern good quality code conventions and serves as a project template for modern clojure/clojurescript applications. The code is configured with built in guidelines for AI. As an open source project it is a place where engineers can demonstrate the skills that matter most in the next era of software development.
22+
23+
Contributing to ClojureDocs exercises the capabilities that distinguish effective developers in an AI-assisted world:
24+
- Reviewing and verifying code written by others
25+
- Writing and following clear specifications that define what "correct" means
26+
- Designing systems that enforce quality through structure, not process
27+
- Thinking architecturally about data models and extension points
28+
- Making judgment calls about what's useful versus what's merely correct
29+
30+
An engineer who ships a contribution to ClojureDocs — whether it's a verified example, a hardened validation rule, a data model improvement, or a new library integration — has produced a public, verifiable artifact that demonstrates these skills in a way no interview question can simulate. The codebase is intentionally designed to reward this kind of work: loosely coupled so contributions are independently testable, explicitly modeled so changes are safe to make, and enforced by machines so human effort goes toward the decisions that require judgment. ClojureDocs is not just an open source project. It's an oppertunity to exercise and practice the skills the industry needs most.
31+
32+
---
33+
34+
## We will instrument analytics and establish baseline metrics for how people use ClojureDocs today.
35+
36+
**Why:** We can't improve what we don't measure. Right now we don't know which vars drive the most traffic, where users enter and leave, or which examples get used. A validated understanding of current usage patterns — entry points, popular vars, dead zones, session depth — is the foundation for every prioritization decision that follows. This work comes first because it de-risks everything else.
37+
38+
## We will make the data model explicit and extensible, decoupled from business logic.
39+
40+
**Why:** The current system encodes its data model implicitly across business logic. Every new feature risks breaking something unrelated. This is the keystone investment — without a clean, explicit schema, multi-library support, quality scoring, REPL integration, and every other improvement requires scattered changes across the codebase. An explicit model unlocks safe, parallel iteration and lowers the barrier for contributors.
41+
42+
## We will build a verification pipeline that structurally rejects incorrect examples.
43+
44+
**Why:** AI made content generation free; the bottleneck is now verification. If every example must execute correctly against its documented var, broken contributions are eliminated at submission time — not caught by reviewers after the fact. We reserve human judgment for the harder question: is this example *useful*, not just *correct*?
45+
46+
## We will introduce content quality signals to preserve human-first, high-trust documentation.
47+
48+
**Why:** Even with executable validation, not all correct examples are good examples. Author reputation, freshness, and engagement metrics surface examples that come from real experience and teach effectively — signal that no volume of AI-generated content can replicate.
49+
50+
## We will embed an interactive REPL on every var page with executable examples.
51+
52+
**Why:** Clojure is learned at the REPL, but ClojureDocs is static text. That's a fundamental mismatch. Executable, modifiable examples collapse the distance between reading documentation and writing code. In a world where AI threatens to eliminate the reps needed to build skills, the REPL is where developers still put in the work.
53+
54+
## We will support documentation for libraries beyond `clojure.core`.
55+
56+
**Why:** ClojureDocs assumes a single-library world, hardcoded into the data model and UI. The ecosystem has grown far beyond core. Multi-library support transforms ClojureDocs from a reference for one namespace into a documentation platform for the ecosystem.
57+
58+
## We will connect documentation to people and community resources.
59+
60+
**Why:** A var page with only a docstring and examples is a dead end. Developers learning a function need context that only comes from humans — when to use it, when not to, how it composes. By linking vars to blog posts, talks, GitHub usage, and live sessions like Clojure Camp, each page becomes a hub in a knowledge graph rather than an isolated leaf.
61+
62+
## We will surface cross-dialect compatibility and serve as a hub between Clojure dialects.
63+
64+
**Why:** The Clojure ecosystem now spans multiple dialects — Clojure, ClojureScript, babashka, jank — each with overlapping but not identical standard libraries. Developers moving between dialects need to know what works where. By linking vars to cross-dialect test suites like [jank-lang/clojure-test-suite](https://github.com/jank-lang/clojure-test-suite) and marking dialect compatibility on var pages, ClojureDocs becomes the place where the ecosystem's shared surface area is visible. This makes it easier to adopt new dialects and grows the ecosystem as a whole.
65+
66+
---
67+
68+
## Strategic Bets
69+
70+
1. **Human signal over volume.** Our moat is trust, not content generation. Companies that [replaced human judgment with AI volume reversed course](https://customerservicemanager.com/the-truth-about-klarnas-backtrack-on-ai-and-the-rehiring-of-humans/). We bet on the opposite direction.
71+
72+
2. **Enforce, don't document.** Quality rules belong in the system, not in style guides people must read and remember. Guidelines that depend on humans reading them will be ignored — especially as AI makes it cheap to generate plausible-looking content at volume.
73+
74+
3. **REPL as the interface.** Docs should behave like code. The REPL is both learning tool and verification mechanism.
75+
76+
4. **Docs as a graph, not pages.** Knowledge about a function is distributed across the ecosystem. We model it that way:
77+
- **Var → Var:** See-also relationships, enriched by co-occurrence in real codebases.
78+
- **Var → Namespace → Library:** Fluid navigation up and down the hierarchy.
79+
- **Var → People:** Make human expertise visible — who wrote the best example, the definitive blog post, the recurring mob session.
80+
- **Var → Source:** Link to source code for every var, not just core. Currently source links exist only for `clojure.core`.
81+
- **Var → Usage in the wild:** Real-world usage in open source codebases (e.g. via [grep.app](https://grep.app)) shows how a function is used in context, not just in isolated examples. Both have value.
82+
- **Var → Tests:** Link to relevant tests, especially cross-dialect efforts like [jank-lang/clojure-test-suite](https://github.com/jank-lang/clojure-test-suite). Tests are executable specifications — they show edge cases and expected behavior that docstrings and examples often miss.
83+
- **Var → Dialects:** Mark which dialects support a given var (Clojure, ClojureScript, babashka, jank). Surface where behavior is shared and where it diverges. This makes ClojureDocs a hub between dialects and helps grow the ecosystem by lowering the cost of moving between them.
84+
- **Var → Resources:** Blog posts, talks, threads. Each var page is a curated entry point.
85+
86+
This enables relationship-based discovery ("functions related to sequence transformation") instead of requiring users to already know the name they're searching for.
87+
88+
5. **Cross-dialect hub.** The ecosystem grows when it's easy to move between dialects. ClojureDocs is uniquely positioned to be the connective tissue — the place where shared and divergent behavior across Clojure, ClojureScript, babashka, and jank is visible at a glance.
89+
90+
6. **Abstraction-first development.** No feature work without a stable model underneath. The graph requires the explicit data model; everything else builds on it.
91+
92+
---
93+
94+
## Risks
95+
96+
- **Refactor stall:** Investing in the data model without shipping visible user value for too long. The 11th-hour insight applies here — weeks of understanding should produce concrete enforcement, not just more documents.
97+
- **Overengineering:** Building more schema than current use cases require.
98+
- **Moderation friction:** Quality enforcement that creates false positives and discourages real contributors. The line between "structurally rejected" and "frustratingly pedantic" requires ongoing calibration.
99+
- **Low engagement:** Improvements that don't move contributor or user behavior.
100+
- **Industry uncertainty:** The AI landscape is shifting fast. Bets we make about what developers need — REPL-based learning, human curation, executable verification — may be overtaken by capabilities or workflows we can't predict today.
101+
102+
103+
---
104+
105+
## Success Metrics
106+
107+
- ↓ Time to first REPL interaction on a var page
108+
- ↑ Examples that are executable and verified
109+
- ↑ Pages with executable examples
110+
- ↑ Repeat usage and session depth
111+
- ↑ Contributions from known community members
112+
- ↓ Incorrect examples reaching users
113+
- ↓ Low-quality submissions surviving the pipeline
114+
- ↑ Libraries documented beyond `clojure.core`
115+
- ↑ Vars with cross-dialect compatibility information
116+
117+
118+
<br>
119+
120+
>AI Disclaimer: The ideas, direction, and strategic framing in this document were generated, posed, and drafted by Jordan Miller. Claude (Opus 4.6) edited, structured, and refined the prose.

0 commit comments

Comments
 (0)