Manejo de desacuerdos técnicos en equipos Go
Patrones de facilitación para debates entre modismos y frameworks.
Busca en todas las páginas de la documentación
Patrones de facilitación para debates entre modismos y frameworks.
Los equipos Go discuten sobre el tipo correcto de cosas: stdlib versus routers, genéricos versus interfaces, monolito versus módulos, errgroup versus canales.
El desacuerdo saludable mejora los diseños.
El desacuerdo no facilitado se convierte en servicios incompatibles y hilos de revisión amargos.
Los desacuerdos técnicos en los equipos Go generalmente involucran compensaciones entre simplicidad, velocidad y familiaridad operativa.
La facilitación significa hacer explícitas las opciones, puntuar según criterios acordados, asignar un responsable de la decisión y registrar los resultados en ADRs o estándares del equipo.
El objetivo no es el entusiasmo unánime.
Es discrepar y comprometerse con una fecha de revisión cuando los datos puedan cambiar la decisión.
Tarjeta de receta de referencia rápida - lista para copiar y pegar.
## Decisión técnica: <tema>
Opciones:
1. ...
2. ...
Criterios (ponderados):
- operabilidad
- familiaridad del equipo
- tiempo de compilación/despliegue
- consistencia con el índice de ADRs
Responsable de la decisión: @nombre
Fecha límite: <fecha>
Revisión de respaldo: <trimestre>Cuándo usar esto:
Dos seniors discrepan sobre la concurrencia de workers: canales vs errgroup.
## Registro de decisión (salida de la reunión)
Tema: orquestación de workers de ingesta
Opciones:
A) errgroup + SetLimit
B) channel de pool de workers + goroutines fijas
Puntuaciones de criterios (1-5):
| Criterio | A | B |
|---|---|---|
| Claridad de apagado | 5 | 3 |
| Familiaridad del equipo | 4 | 4 |
| Testabilidad | 5 | 4 |
Decisión: A para el nuevo worker de ingesta; B permanece en la facturación heredada hasta que el ADR 0031 lo reemplace.
Responsable: @tl
Revisión: después de la prueba de carga del Q3// Fragmento de referencia acordado para la opción A
g, ctx := errgroup.WithContext(ctx)
g.SetLimit(8)
for _, job := range batch {
g.Go(func() error { return process(ctx, job) })
}
return g.Wait()Lo que esto demuestra:
| Debate | Tensión subyacente | Consejo de facilitación |
|---|---|---|
| stdlib vs chi/gin | Consistencia vs DX | Predeterminado de la organización + excepciones documentadas |
| genéricos vs interfaces | Claridad vs abstracción | Prototipa ambos en el mismo boceto de API |
| monolito vs micro-módulo | Velocidad de compilación vs autonomía | Mide el cambio de etiquetas antes de dividir |
| worker síncrono vs asíncrono | Latencia vs complejidad | Prueba de carga antes de elegir canales |
| slog vs zap | Stdlib vs ecosistema | Elige por ADR de observabilidad |
// Al debatir bibliotecas de errores, anclarse primero en stdlib
if errors.Is(err, ErrNotFound) {
return mapNotFound()
}depguard).| Alternativa | Usar cuando | No usar cuando |
|---|---|---|
| Probar ambas opciones | Evidencia escasa | La decisión bloquea a varios equipos durante semanas |
| Escalar al consejo de arquitectos | Impacto inter-organizacional | Estilo de manejador local del equipo |
| Por defecto a minimalismo stdlib | Sin datos, puntuaciones iguales | El framework claramente ahorra semanas |
| Posponer decisión | Bifurcación de bajo impacto | Elección de concurrencia en producción |
Líder técnico para el alcance del equipo; staff/plataforma para los valores predeterminados transversales; director de ingeniería para las excepciones de políticas.
Una sesión enfocada más comentarios asíncronos en documentos - generalmente menos de una semana para decisiones de equipo.
Elige el valor predeterminado de la organización (a menudo la simplicidad de stdlib) y establece una fecha de revisión después del próximo benchmark o lanzamiento.
Sí, en las notas del ADR - ayuda a los futuros revisores a comprender el contexto sin reabrir la pelea.
Mover a un hilo de decisión en el documento; mantener Slack para hechos, no encuestas que eludan los criterios.
Cuando la decisión afecta los SLOs, la postura de seguridad o los gráficos de módulos de varios equipos.
Solo con un ADR que lo reemplace aprobado por el propietario de la plataforma - no excepciones locales en README.
Mide los resultados: número de incidentes, tiempo de revisión, semanas de incorporación - no lemas.
Da la bienvenida a la entrada de criterios; el responsable de la decisión aún decide con un alcance apropiado para el nivel.
Utiliza la puntuación de criterios sobre los votos brutos - la popularidad omite las restricciones de operabilidad.
Aporta nuevos datos a la fecha de revisión o presenta un ADR que lo reemplace con un plan de migración.
No - bloquea riesgos de seguridad, pérdida de datos o condiciones de carrera independientemente del resultado del proceso.
Versiones de Stack: Esta página fue escrita para Go 1.26.x (predeterminado Green Tea GC, go fix modernizers - verificar parche en la compilación), chi (última versión - verificar en la compilación), gin (última versión - verificar en la compilación), echo (última versión - verificar en la compilación), google.golang.org/grpc (última versión - verificar en la compilación), sigs.k8s.io/controller-runtime (última versión - verificar en la compilación), kubebuilder (última versión - verificar en la compilación), tinygo (última versión - verificar objetivos de placa en la compilación), wazero (última versión - verificar en la compilación), y golangci-lint (última versión - verificar conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 16 jul 2026