Screen to comeÉcran à venirA spot page: the verdict, then the whyUne fiche : le verdict, puis le pourquoi

A problem that can’t be verified yet

Cayenne

A surfer doesn’t want more data. They want a fair call in two seconds, and the right to check it.

Role
Product design and orchestrationConception produit et orchestration
Duration
6 weeks6 semaines
Status
Private beta, zero users, 121 spotsBêta privée, zéro utilisateur, 121 spots
Reading
3 min read

01The problemLe problème

Cayenne is Duckrew’s surf forecast engine, spot by spot. It is in private beta, with no users for now.

Across 4,575 lines of public reviews of existing apps, the number one frustration isn’t the swell. It’s the rating. “Comment 1 pied peut être bon ?” (how can 1 ft be good?)

And the cost of getting it wrong, in one user’s words: “after a 3-hour drive, I find the spot empty and tiny, unsurfable ripples.”

Cayenne est le moteur de prévision de surf de Duckrew, spot par spot. Il est en bêta privée, sans utilisateur pour l’instant.

Dans 4 575 lignes d’avis publics sur les applications existantes, la frustration n°1 n’est pas la houle. C’est la note. « Comment 1 pied peut être bon ? »

Et le coût de l’erreur, dit par un utilisateur : « après avoir fait 3 heures de voiture, je vois le spot désert et des petites vaguelettes insurfables. »

02What it really wasCe que c’était vraiment

The assumption is that a surfer wants more data. The corpus says the opposite: they want a fair call in two seconds, and the right to check it. The problem wasn’t to predict better. It was to earn trust.

It’s the problem of any interface where a machine proposes and an expert must be able to push back. Here, the constraint was that I couldn’t know whether the forecast was right. So the job was to design not knowing.

On croit qu’un surfeur veut plus de données. Le corpus dit l’inverse : il veut une décision juste en deux secondes, et le droit de la vérifier. Le problème n’était pas de mieux prédire. Il était de mériter la confiance.

C’est le problème de toute interface où une machine propose et où un expert doit pouvoir contester. Ici, la contrainte était que je ne pouvais pas savoir si la prévision était juste. Il fallait donc concevoir le fait de ne pas savoir.

03Where the answers wereOù était l’information

  • 4,575 lines of public reviews: App Store, Google Play, Reddit, a competitor’s reviews with its founder’s replies, Instagram comments. Read in full in two passes, with the same grid, every quote cited with its line number.
  • Output: 20 counted themes, 10 truths, 4 personas, 10 jobs to be done, an opportunity tree.

The limits, written before anyone asked. These are other products’ users, not mine. No interviews, no observation. The corpus over-represents the unhappy and the experts. The first field study will be the beta, and its protocol is written.

  • 4 575 lignes d’avis publics : App Store, Google Play, Reddit, les avis d’un concurrent avec les réponses de son fondateur, des commentaires Instagram. Lecture intégrale en deux tranches, avec la même grille, chaque verbatim cité avec son numéro de ligne.
  • En sortie : 20 thèmes comptés, 10 vérités, 4 personas, 10 jobs to be done, un arbre d’opportunités.

Les limites, écrites avant qu’on les demande. Ce sont les utilisateurs d’autres produits, pas les miens. Aucun entretien, aucune observation. Le corpus surreprésente les mécontents et les experts. Le premier terrain sera la bêta, et son protocole est écrit.

04The constraintsLes contraintes

  • No field measurement: the engine’s accuracy isn’t proven yet.
  • Zero users, zero usage data: the product sits behind a flag.
  • A system built by AI agents: the risk wasn’t writing too little code, it was the code telling me what I wanted to hear.
  • Aucune mesure de terrain : la justesse du moteur n’est pas encore prouvée.
  • Zéro utilisateur, zéro donnée d’usage : le produit est derrière un drapeau.
  • Un système construit par des agents IA : le risque n’était pas d’écrire trop peu de code, c’était qu’il me raconte ce que je voulais entendre.

05What I ruled outCe que j’ai écarté

  1. Ruled outÉcarté

    A numeric score (“84/100”)Le score en nombre (« 84/100 »)

    The corpus hates ratings because they are wrong, not because they are numbers. Three levels are enough to decide; a number to the decimal manufactures false precision.
    Le corpus déteste les notes parce qu’elles sont fausses, pas parce que ce sont des chiffres. Trois paliers suffisent à décider ; un nombre au dixième fabrique une fausse précision.
  2. Ruled outÉcarté

    A weighted sum of factorsUne somme pondérée des facteurs

    A sum lets an excellent factor make up for a deal-breaker. And above all, it can’t say why. With a product, the lowest factor is mechanically the culprit: the “because” is never written after the fact, it is true by construction.
    Une somme laisse un excellent facteur compenser un facteur rédhibitoire. Et surtout, elle ne sait pas dire pourquoi. Avec un produit, le facteur le plus bas est mécaniquement le coupable : le « parce que » n’est jamais rédigé après coup, il est vrai par construction.
  3. Ruled outÉcarté

    A sentence generated by a language modelUne phrase générée par un modèle de langage

    The verdict and its reason come out of the calculation, never out of generated text. That is the line between a product and packaging.
    Le verdict et sa raison sortent du calcul, jamais d’un texte généré. C’est la ligne qui sépare un produit d’un emballage.

06The solutionLa solution

Three words, never a number: “Ça vaut le coup” (worth it), “Ça se tente” (worth a try), “Reste au chaud” (stay home). And below, the why, calculated, never written.

Uncertainty as a design material

SituationWhat the product says
The scenarios diverge“Nos scénarios ne sont pas d’accord : ça se joue.” (our scenarios disagree: it’s a toss-up)
Low confidence“Revu à la baisse” (revised down), and confidence can never push a verdict up
Uncalibrated spot page“En calage” (being calibrated), and the spot takes no rank
Distant horizon“À 5 jours, c’est une tendance, pas un rendez-vous” (at 5 days, it’s a trend, not an appointment)
Maximum certainty“Quasiment sûr” (almost certain), never “ten out of ten”
Missing dataAn honest blank, never a zero, and it can’t be the culprit factor

Trust isn’t declared, it is designed.

The evening question is unanchored

To check a verdict, the product asks the next day: “Hier à Lacanau, c’était comment ?” (how was Lacanau yesterday?). Never “the call was worth a try, how was it?”: quoting the verdict inside the question meant to check it pulls the answers toward what was announced. The question is about the sea, not the session, so that false positives stay measurable, and the verdict is revealed only after the answer.

Trois mots, jamais un nombre : « Ça vaut le coup », « Ça se tente », « Reste au chaud ». Et dessous, le pourquoi, calculé, jamais rédigé.

L’incertitude comme matériau de design

SituationCe que le produit dit
Les scénarios divergent« Nos scénarios ne sont pas d’accord : ça se joue. »
Confiance basse« Revu à la baisse », et la confiance ne peut jamais faire monter un verdict
Fiche non calibrée« En calage », et le spot ne prend aucun rang
Échéance lointaine« À 5 jours, c’est une tendance, pas un rendez-vous »
Certitude maximale« Quasiment sûr », jamais « dix sur dix »
Donnée absenteUn vide honnête, jamais un zéro, et elle ne peut pas être le facteur coupable

La confiance ne se déclare pas, elle se conçoit.

La question du soir est désancrée

Pour vérifier un verdict, le produit demande le lendemain : « Hier à Lacanau, c’était comment ? ». Jamais « on avait dit ça se tente, c’était comment ? » : citer le verdict dans la question qui doit le vérifier tire les réponses vers ce qu’on a annoncé. La question porte sur la mer et pas sur la session, pour que les faux positifs restent mesurables, et le verdict ne se révèle qu’après la réponse.

Screen to comeÉcran à venirA spot pageUne fiche de spot
  1. 1
    Three words as the title. The spot name is navigation; the verdict is the headline.
    Trois mots en titre. Le nom du spot est de la navigation ; le verdict est le titre.
  2. 2
    The why, glued to it. Computed by the engine from the lowest factor, never written after the fact.
    Le pourquoi, collé au verdict. Calculé par le moteur depuis le facteur le plus bas, jamais rédigé après coup.
  3. 3
    “7 chances out of 10”, never “10 out of 10”. The engine replayed on fifty scenarios; below 5, “it’s a toss-up”.
    « 7 chances sur 10 », jamais « 10 sur 10 ». Le moteur rejoué sur cinquante scénarios ; sous 5, « ça se joue ».
  4. 4
    The stamps. “Revised down” when confidence is low, “being calibrated” when the spot isn’t validated. Confidence can never raise a verdict.
    Les tampons. « Revu à la baisse » quand la confiance est basse, « En calage » quand le spot n’est pas validé. La confiance ne fait jamais monter un verdict.
  5. 5
    The evening question, about the sea, not the session, with the verdict revealed only after the answer.
    La question du soir, sur la mer et pas sur la session, le verdict révélé seulement après la réponse.

07Who did whatQui a fait quoi

WhoQuiDid whatA fait quoi
AI agents, with Claude CodeAgents IA, avec Claude Code
210 of the engine’s 222 commits, under those rules.
210 des 222 commits du moteur, sous ces règles.
MeMoi
The product, the language, the refusals, the architecture of the call, and the rules that keep the agents honest.
Le produit, la langue, les refus, l’architecture de la décision, et les règles qui gardent les agents honnêtes.

I didn’t write this code by hand. I designed the product and orchestrated agents to build it, with Claude Code: 210 of the engine’s 222 commits are co-signed by the agent, and my training at Epitech lets me read what it writes, judge it and refuse it. What I brought were the decisions: the language, the refusals, the architecture of the call, and the rules that keep an autonomous system from telling me what I want to hear.

  • A rulebook written before the first line of code, with its prohibitions.
  • The success criterion written before looking at the data; a negative result gets published like a positive one.
  • A decision that isn’t written in the repository never happened.
  • If a document contradicts the code, the code wins.
  • No figure in the documentation that can’t be verified in the repository.
  • The test set is looked at once per milestone: every extra look, and I’m the one overfitting.

Je n’ai pas écrit ce code à la main. J’ai conçu le produit et orchestré des agents pour le construire, avec Claude Code : 210 des 222 commits du moteur sont co-signés par l’agent, et ma formation à Epitech me sert à lire ce qu’il écrit, à le juger et à le refuser. Ce que j’ai apporté, ce sont les arbitrages : la langue, les refus, l’architecture de la décision, et les règles qui empêchent un système autonome de me raconter ce que je veux entendre.

  • Un document de règles écrit avant la première ligne de code, avec ses interdits.
  • Le critère de réussite écrit avant de regarder les données ; un résultat négatif se publie comme un positif.
  • Une décision qui n’est pas écrite dans le dépôt n’a pas eu lieu.
  • Si un document contredit le code, le code gagne.
  • Aucun chiffre en documentation qui ne se vérifie dans le dépôt.
  • Le jeu de test se regarde une fois par jalon : chaque regard de plus, c’est moi qui surapprends.

08What the data saidCe que la donnée a dit

4,575
lines of public reviews read in fulllignes d’avis publics lues en entier
+15.8%
optimism bias no safety net could seede biais d’optimisme qu’aucun filet ne voyait
121
spots, in private betaspots, en bêta privée
0
users yet, and said as suchutilisateur pour l’instant, et c’est dit

The circular judge. On 26 August, an audit established that the chain turning offshore sea into displayed height carried an optimism bias of +15.8%, the same on every spot. No safety net could see it: all of them compared the engine to a copy of the engine. A verification layer that proved itself right, whatever the engine.

I didn’t fix the error first: I fixed the setup that kept it from being seen.

What isn’t proven. Zero users, zero usage data, no accuracy measurement to date. The criterion that will say whether the engine works is written and dated before the first measurement.

Le juge circulaire. Le 26 août, un audit établit que la chaîne qui transforme la mer du large en hauteur affichée porte un biais d’optimisme de +15,8 %, le même sur tous les spots. Aucun filet ne pouvait le voir : tous comparaient le moteur à une copie du moteur. Un étage de vérification qui se donnait raison, quel que soit le moteur.

Je n’ai pas corrigé l’erreur d’abord : j’ai corrigé le dispositif qui empêchait de la voir.

Ce qui n’est pas prouvé. Zéro utilisateur, zéro donnée d’usage, aucune mesure de justesse à ce jour. Le critère qui dira si le moteur marche est écrit et daté avant la première mesure.

09In hindsightAvec le recul

[to write]

[à écrire]

If you want to dig in, everything is written down, including what doesn’t work.

[links to the white paper and the product book, in anonymised versions]

Si vous voulez creuser, tout est écrit, y compris ce qui ne marche pas.

[liens vers le livre blanc et le livre produit, en versions anonymisées]

The whole projectLe projet en entier

  • Screen to comeÉcran à venirA spot page marked “Revised down”Une fiche « Revu à la baisse »
  • Screen to comeÉcran à venirA spot page marked “Being calibrated”Une fiche « En calage »
  • Screen to comeÉcran à venirThe hub: a map, the verdicts of the dayLe hub : une carte, les verdicts du jour