Atlasingeniería

Inglés técnicoEscritura profesional — Semi-SeniorTema 6Semi-Senior

Escribir un design doc o RFC en inglés

Un design doc se escribe para que alguien te diga que estás equivocado antes de que escribas el código. Eso define su estructura: el problema primero, las alternativas en serio, y la decisión al final.

El design doc es el texto que más pesa en la carrera de alguien que trabaja para afuera: es lo que leen personas que nunca te vieron trabajar, y por lo que deciden si te dan un problema más grande.

Y es el que más fácil sale mal, porque la tentación es escribir la solución que ya tenés en la cabeza y buscarle argumentos. Un design doc bien escrito hace lo contrario: plantea el problema con tanta claridad que las alternativas se pueden comparar de verdad, incluida la de no hacer nada.

La estructura

Plantilla

Design doc / RFC

Context and problem

What is happening today, with evidence: "Exports over 10k rows time out. This affected 14 customers last month and generated 31 support tickets."

Con números y sin la solución adentro. Si el problema se enuncia como «necesitamos una cola de mensajes», la decisión ya está tomada y el documento no sirve para decidir.

Goals / Non-goals

Goals: exports of any size complete reliably. Non-goals: changing the export file format, supporting scheduled exports.

Los non-goals son la sección más útil y la que casi nadie escribe: son los que frenan la discusión que no corresponde a este documento.

Proposal

The approach, in enough detail to be argued with: data flow, components, contracts, and what changes for the user.

Suficiente detalle para estar en desacuerdo. Un diagrama y las dos o tres decisiones que lo sostienen.

Alternatives considered

Each one with why it was not chosen: "Streaming the CSV directly: simpler, but keeps a connection open for minutes and does not survive a deploy."

En serio, no de adorno. Si las alternativas están escritas para perder, cualquier lector con experiencia lo nota y deja de confiar en el resto.

Trade-offs and risks

What gets worse: "This adds a queue to a system that had none, so we now need to monitor it and handle poison messages."

Escribir el costo de tu propia propuesta es lo que hace que te crean el beneficio.

Rollout plan

How it ships: behind a flag, for internal accounts first, with a way back.

Cómo se prueba en producción sin romper a nadie, y cómo se vuelve atrás si sale mal.

Open questions

What you want input on: "Should exports expire after 7 days, or stay until the customer deletes them?"

Dirige la revisión a donde te sirve. Sin esta sección, los comentarios van a caer en la parte que más fácil es opinar, que casi nunca es la importante.

Orden no negociable: el problema antes que la propuesta. Un documento que arranca con la solución sólo se puede aprobar o rechazar, no discutir.

Antes de seguir, predecí

Un design doc que arranca con la solución propuesta. ¿Qué le falta?

El lenguaje de las decisiones

El inglés de un design doc es formal pero directo, y tiene fórmulas fijas para lo que más cuesta decir: proponer con firmeza sin sonar cerrado, y descartar una opción sin despreciarla.

IntenciónFórmulaNota
ProponerI propose we … / This document proposes …Directo; «maybe we could» debilita el documento entero
Justificar una decisiónWe chose X over Y because …Siempre «because»: una decisión sin porqué se vuelve a discutir en seis meses
Descartar una alternativa con respetoX is a reasonable option, but it doesn't handle …Reconocer lo bueno de lo que descartás es lo que hace creíble el descarte
Marcar un supuestoThis assumes exports stay under 1M rows. If that changes, …Los supuestos explícitos son lo que permite revisar la decisión después
Reconocer un costoThe main trade-off is …Escribirlo vos es mejor que que lo encuentre el revisor
Dejar algo abiertoOpen question: … I'd like input from @team-platformCon destinatario; una pregunta sin dueño no la contesta nadie
Cerrar el alcanceOut of scope for this document: …Es el non-goal aplicado a la discusión
Pedir revisiónLooking for feedback by Thursday; I'll start on the API contract after thatFecha y qué pasa si no hay comentarios: sin eso el documento queda en revisión para siempre
La última fila resuelve el problema más común de los design docs: quedan abiertos. Se pide comentarios con fecha y se dice qué se hace cuando esa fecha llegue.
Escrito asíCómo se leeMejor
We need a message queueLa solución disfrazada de problemaExports over 10k rows time out, affecting 14 customers last month
This is obviously the best approachCierra la discusión que el documento vino a abrirThis approach fits best given our current traffic; the main trade-off is …
Alternative: do nothing (bad)Alternativa de adornoAlternative: do nothing. The 31 monthly tickets are manageable today, but the largest accounts are growing
We could maybe try to consider using a queueNadie sabe qué se está proponiendoI propose we move exports to a background queue
This will scalePromesa sin númeroThis handles 50 concurrent exports of 1M rows each; beyond that we would need …
«Do nothing» es una alternativa legítima y conviene tratarla como tal: en muchos documentos es la que gana, y en los otros es la que da la medida del beneficio.

Practicalo

Reescribilo

El arranque de un design doc que empieza por la solución y no deja nada para discutir. Reescribilo para que abra con el problema y sus números, y deje las alternativas realmente abiertas.

# Adding Kafka

We need Kafka because our system is not scalable and everyone uses Kafka nowadays. It is obviously the best option. I looked at other things but they are not good. Let me know if you agree so I can start.

Fijate qué cambió primero: el título. «Adding Kafka» sólo se puede aprobar o rechazar; «Making large exports reliable» se puede discutir.

  • trade-off

    /ˈtreɪdɒf/ · suena como tréidof

    Error común: decir «tradeóf», separando y acentuando mal

  • scope

    /skəʊp/ · suena como skóup

    Error común: decir «escop», con e inicial

  • queue

    /kjuː/ · suena como kiú, una sola sílaba

    Error común: decir «kueue» o «cué»

  • throughput

    /ˈθruːpʊt/ · suena como zrúput, con z de «think»

    Error común: decir «zroughput» pronunciando la gh

  • rationale

    /ˌræʃəˈnɑːl/ · suena como rashonáal

    Error común: decir «rasional» como en español

«Rationale» aparece en cualquier plantilla de ADR y casi nunca se dice bien.

En la práctica

Cierre

Autoevaluación

¿Lo entendiste?

¿Por qué el problema va antes que la propuesta?
¿Para qué sirven los non-goals?
¿Qué pasa cuando las alternativas están escritas para perder?
¿Por qué escribir el trade-off de tu propia propuesta?