1
00:00:09,679 --> 00:00:15,660
Buenas, esto es BIMPRAXIS, el podcast donde el

2
00:00:15,660 --> 00:00:17,739
BIM se encuentra con la inteligencia artificial.

3
00:00:20,339 --> 00:00:23,480
Exploramos la ciencia, la tecnología y el futuro

4
00:00:23,480 --> 00:00:26,460
desde el enfoque de la arquitectura, ingeniería y

5
00:00:26,460 --> 00:00:27,120
construcción.

6
00:00:28,800 --> 00:00:29,440
¡Empezamos!

7
00:00:36,890 --> 00:00:40,170
Muy buenas, bienvenidas, bienvenidos a un nuevo episodio

8
00:00:40,170 --> 00:00:40,909
de BIMPRAXIS.

9
00:00:41,090 --> 00:00:43,530
Hoy os traemos el diseño guiado por el

10
00:00:43,530 --> 00:00:44,030
dominio.

11
00:00:44,049 --> 00:00:46,469
¿Cómo domar la complejidad en el corazón del

12
00:00:46,469 --> 00:00:46,810
software?

13
00:00:46,810 --> 00:00:48,329
Hola a todos.

14
00:00:48,789 --> 00:00:51,070
Y, bueno, hoy vamos a sumergirnos en un

15
00:00:51,070 --> 00:00:53,969
problema que, a ver, seamos completamente sinceros, es

16
00:00:53,969 --> 00:00:56,049
algo que persigue como un fantasma a casi

17
00:00:56,049 --> 00:00:58,310
cualquier equipo técnico en algún momento de su

18
00:00:58,310 --> 00:00:58,869
existencia.

19
00:00:59,509 --> 00:00:59,990
Totalmente.

20
00:01:00,090 --> 00:01:01,189
A todos nos ha pasado.

21
00:01:01,490 --> 00:01:03,030
Es que, imaginad la situación.

22
00:01:03,549 --> 00:01:06,989
Empezáis un proyecto, todo es optimismo, los diagramas

23
00:01:06,989 --> 00:01:09,170
en la pizarra están limpios, la arquitectura parece

24
00:01:09,170 --> 00:01:11,750
impecable y, de repente… Pasan un par de

25
00:01:11,750 --> 00:01:13,209
años y es un monstruo.

26
00:01:13,489 --> 00:01:15,170
Exacto, un monstruo implacable.

27
00:01:15,510 --> 00:01:16,790
Hablamos de un código incompatible.

28
00:01:16,810 --> 00:01:20,170
Incomprensible, extremadamente rígido, donde vas y cambias una

29
00:01:20,170 --> 00:01:22,209
simple coma para, no sé, añadir una función

30
00:01:22,209 --> 00:01:25,590
minúscula, y misteriosamente se rompen tres cosas distintas

31
00:01:25,590 --> 00:01:26,670
en otra parte del sistema.

32
00:01:27,170 --> 00:01:27,689
¡Qué locura!

33
00:01:27,810 --> 00:01:29,670
Pero es el pan de cada día, ¿verdad?

34
00:01:29,909 --> 00:01:31,510
Para hoy es fascinante.

35
00:01:31,790 --> 00:01:34,290
Porque casi nunca es por falta de habilidades

36
00:01:34,290 --> 00:01:37,609
técnicas o porque los programadores no sepan teclear.

37
00:01:37,790 --> 00:01:38,189
Vamos.

38
00:01:38,450 --> 00:01:39,430
Claro, no es eso.

39
00:01:39,609 --> 00:01:42,189
Es porque el código, en algún punto oscuro

40
00:01:42,189 --> 00:01:44,609
del camino, se ha desconectado por completo de

41
00:01:44,609 --> 00:01:48,569
la realidad viva, palpitante del negocio que intentaba

42
00:01:48,569 --> 00:01:49,010
modelar.

43
00:01:49,390 --> 00:01:51,489
Así que vamos a explorar a fondo el

44
00:01:51,489 --> 00:01:54,750
legendario enfoque de Eric Evans, conocido mundialmente como

45
00:01:54,750 --> 00:01:58,170
el Domain Driven Design, o, bueno, diseño guiado

46
00:01:58,170 --> 00:01:58,909
por el dominio.

47
00:01:59,030 --> 00:02:01,349
Y el planteamiento de ese problema que haces

48
00:02:01,349 --> 00:02:02,129
es fundamental.

49
00:02:02,730 --> 00:02:05,450
Porque, a ver, el objetivo de nuestro análisis

50
00:02:05,450 --> 00:02:07,689
a fondo de hoy no es aprender un

51
00:02:07,689 --> 00:02:09,629
nuevo truco para picar código más rápido.

52
00:02:09,949 --> 00:02:11,289
Ya, no venimos a eso.

53
00:02:11,449 --> 00:02:13,270
Ni vamos a hablar de dominar el último

54
00:02:13,270 --> 00:02:15,030
framework que se ha puesto de moda esta

55
00:02:15,030 --> 00:02:16,409
semana, que siempre hay uno nuevo.

56
00:02:16,810 --> 00:02:18,889
Hoy venimos a aprender a pensar sobre el

57
00:02:18,889 --> 00:02:21,409
software de una manera radicalmente distinta.

58
00:02:21,490 --> 00:02:22,710
A pensar, exacto.

59
00:02:22,710 --> 00:02:26,250
La misión de esta exploración es, digamos, descubrir

60
00:02:26,250 --> 00:02:29,449
cómo los equipos puramente técnicos y los verdaderos

61
00:02:29,449 --> 00:02:32,590
expertos del negocio pueden llegar a fusionar sus

62
00:02:32,590 --> 00:02:33,090
mentes.

63
00:02:33,289 --> 00:02:34,289
Qué bien suena eso.

64
00:02:34,469 --> 00:02:37,090
Sí, es decir, cómo pueden destilar lo que

65
00:02:37,090 --> 00:02:39,629
en este ámbito llamamos un modelo profundo.

66
00:02:39,710 --> 00:02:42,990
Para coger toda esa complejidad caótica, confusa y

67
00:02:42,990 --> 00:02:45,590
desordenada del mundo real y convertirla en un

68
00:02:45,590 --> 00:02:48,129
sistema de software, que sea de verdad flexible,

69
00:02:48,449 --> 00:02:51,969
resistente al paso del tiempo y excepcionalmente poderoso.

70
00:02:52,150 --> 00:02:54,069
Pues vamos a desgranar esto paso a paso.

71
00:02:54,349 --> 00:02:56,889
Porque, para resolver el problema de ese software

72
00:02:56,889 --> 00:03:00,169
caótico que acaba, pues, pudriéndose, primero tenemos que

73
00:03:00,169 --> 00:03:02,689
entender cómo demonios se captura el conocimiento en

74
00:03:02,689 --> 00:03:03,069
un proyecto.

75
00:03:03,349 --> 00:03:04,090
Esa es la clave.

76
00:03:04,550 --> 00:03:07,169
Históricamente, la inercia de la industria era muy

77
00:03:07,169 --> 00:03:07,509
simple.

78
00:03:07,750 --> 00:03:09,810
Tú te sientas con el cliente, le pides

79
00:03:09,810 --> 00:03:11,729
que te dicte una lista de requisitos o

80
00:03:11,729 --> 00:03:14,710
de funcionabilidades y te pones a programar como

81
00:03:14,710 --> 00:03:15,590
si no hubiera un mañana.

82
00:03:15,590 --> 00:03:17,870
La famosa lista de la compra, sí.

83
00:03:18,110 --> 00:03:18,629
Exacto.

84
00:03:18,729 --> 00:03:20,710
Pero aquí vemos que eso es una receta

85
00:03:20,710 --> 00:03:22,069
garantizada para el desastre.

86
00:03:22,229 --> 00:03:24,349
No podemos simplemente pedir esa lista.

87
00:03:24,509 --> 00:03:26,949
Tenemos que hacer un esfuerzo activo que, bueno,

88
00:03:27,090 --> 00:03:29,789
Evans denomina el triturado de conocimiento.

89
00:03:29,889 --> 00:03:31,430
El knowledge crunching.

90
00:03:31,530 --> 00:03:34,050
Y fíjate que el concepto del triturado de

91
00:03:34,050 --> 00:03:37,530
conocimiento rompe totalmente con la idea pasiva del

92
00:03:37,530 --> 00:03:38,150
programador.

93
00:03:38,389 --> 00:03:41,289
Ese programador visto como un mero transcriptor.

94
00:03:41,409 --> 00:03:43,009
Ya, el que solo toma notas.

95
00:03:43,090 --> 00:03:43,530
Eso es.

96
00:03:43,669 --> 00:03:45,469
Y para ilustrar cómo funciona.

97
00:03:45,590 --> 00:03:46,009
Y para ilustrar cómo funciona esto en la

98
00:03:46,009 --> 00:03:48,669
realidad, el texto nos sumerge en una anécdota

99
00:03:48,669 --> 00:03:51,610
muy reveladora sobre el diseño de una herramienta

100
00:03:51,610 --> 00:03:53,770
de software para placas de circuito impreso.

101
00:03:53,849 --> 00:03:56,090
Los típicos PCBs de la electrónica.

102
00:03:56,210 --> 00:03:57,370
Los de toda la vida, sí.

103
00:03:57,449 --> 00:03:59,569
Los que llevan todos nuestros aparatos.

104
00:03:59,889 --> 00:04:02,870
Pues a ver, el desarrollador de software asignado

105
00:04:02,870 --> 00:04:06,330
al proyecto no sabía absolutamente nada de ingeniería

106
00:04:06,330 --> 00:04:06,750
eléctrica.

107
00:04:07,009 --> 00:04:07,449
Cero.

108
00:04:07,550 --> 00:04:09,129
Su conocimiento era cero.

109
00:04:09,210 --> 00:04:10,030
Cero patatero.

110
00:04:10,289 --> 00:04:12,550
Y como era de esperar, pues las primeras

111
00:04:12,550 --> 00:04:15,569
reuniones conjuntas fueron un desastre absoluto.

112
00:04:15,590 --> 00:04:16,949
Me lo puedo imaginar, claro.

113
00:04:17,129 --> 00:04:20,370
Los ingenieros de hardware estaban frustrados, intentaban explicar

114
00:04:20,370 --> 00:04:23,209
lo que necesitaban, pero claro, para hacerse entender

115
00:04:23,209 --> 00:04:26,850
por el informático, terminaban pidiendo funciones aburridísimas y

116
00:04:26,850 --> 00:04:28,129
mecánicas de bases de datos.

117
00:04:28,370 --> 00:04:29,889
O sea, bajando al barro técnico.

118
00:04:30,410 --> 00:04:30,930
Exacto.

119
00:04:31,170 --> 00:04:34,310
Decían cosas como, necesito que el programa lea

120
00:04:34,310 --> 00:04:37,370
este archivo de texto inmenso, que ordene las

121
00:04:37,370 --> 00:04:40,329
filas por este parámetro y escupa un informe

122
00:04:40,329 --> 00:04:40,689
en pantalla.

123
00:04:40,970 --> 00:04:41,129
Claro.

124
00:04:41,250 --> 00:04:43,470
Lo que estaba ocurriendo ahí es un clásico.

125
00:04:43,629 --> 00:04:45,569
Los ingenieros de hardware estaban...

126
00:04:45,589 --> 00:04:47,589
Estaban intentando hacer el trabajo de diseño de

127
00:04:47,589 --> 00:04:48,850
software por el programador.

128
00:04:49,089 --> 00:04:49,610
Totalmente.

129
00:04:49,810 --> 00:04:52,250
Editaban operaciones de datos y, a su vez,

130
00:04:52,310 --> 00:04:55,430
pues el programador intentaba asimilar años de ingeniería

131
00:04:55,430 --> 00:04:56,290
eléctrica de golpe.

132
00:04:56,529 --> 00:04:59,589
Un caos absoluto donde al final nadie aportaba

133
00:04:59,589 --> 00:05:00,329
su verdadero valor.

134
00:05:00,569 --> 00:05:03,149
Y el proyecto se habría estancado ahí de

135
00:05:03,149 --> 00:05:05,129
no ser por un punto de inflexión que

136
00:05:05,129 --> 00:05:05,889
fue crucial.

137
00:05:06,329 --> 00:05:07,910
Dejaron de hablar en abstracto.

138
00:05:07,990 --> 00:05:08,449
¿Vale?

139
00:05:08,629 --> 00:05:11,209
Dejaron de pasarse listas de funciones y se

140
00:05:11,209 --> 00:05:13,410
pusieron frente a una pizarra a dibujar diagramas

141
00:05:13,410 --> 00:05:13,629
juntos.

142
00:05:13,930 --> 00:05:15,569
El momento mágico de la pizarra.

143
00:05:15,589 --> 00:05:16,709
Siempre funciona.

144
00:05:17,009 --> 00:05:20,829
El desarrollador empezó a esbozar cajas, líneas, intentando

145
00:05:20,829 --> 00:05:23,689
representar el problema físico real y, de repente,

146
00:05:23,910 --> 00:05:26,949
de todo ese torrente de jerga incomprensible, lograron

147
00:05:26,949 --> 00:05:28,410
extraer un concepto clave.

148
00:05:28,529 --> 00:05:29,029
¿Cuál fue?

149
00:05:29,310 --> 00:05:32,149
Pues los ingenieros de hardware hablaban constantemente de

150
00:05:32,149 --> 00:05:35,490
algo que llamaban NETS, que son, esencialmente, las

151
00:05:35,490 --> 00:05:38,410
redes físicas de conductores que conectan los distintos

152
00:05:38,410 --> 00:05:39,730
componentes en la placa.

153
00:05:39,870 --> 00:05:41,110
Ah, vale, las redes.

154
00:05:41,329 --> 00:05:43,430
Y también hablaban de HOPS, que son los

155
00:05:43,430 --> 00:05:46,509
saltos individuales, de un punto a otro.

156
00:05:46,689 --> 00:05:49,389
El problema real de los ingenieros era detectar

157
00:05:49,389 --> 00:05:52,750
retrasos críticos en las señales si había demasiados

158
00:05:52,750 --> 00:05:53,629
saltos en una red.

159
00:05:53,790 --> 00:05:54,449
Claro, claro.

160
00:05:54,689 --> 00:05:56,829
Al dibujar esto en la pizarra y darle

161
00:05:56,829 --> 00:05:59,750
un nombre concreto a esas ideas, extrajeron oro

162
00:05:59,750 --> 00:06:02,050
puro de toda esa maraña de información técnica.

163
00:06:02,490 --> 00:06:05,410
Y eso es exactamente el triturado de conocimiento.

164
00:06:05,750 --> 00:06:07,810
O sea, no es tomar notas.

165
00:06:07,910 --> 00:06:09,629
No es tomar notas al dictado en una

166
00:06:09,629 --> 00:06:10,110
reunión.

167
00:06:10,290 --> 00:06:11,389
Es sondear.

168
00:06:11,449 --> 00:06:12,870
Es masticar la información.

169
00:06:13,470 --> 00:06:15,250
Probar ideas equivocadas incluso.

170
00:06:15,589 --> 00:06:18,610
Y destilar un modelo conceptual hasta que tenga

171
00:06:18,610 --> 00:06:20,370
perfecto sentido para ambas partes.

172
00:06:20,610 --> 00:06:21,949
Aquí es donde se pone muy interesante.

173
00:06:22,430 --> 00:06:24,029
Paremos un momento a analizar esto.

174
00:06:24,149 --> 00:06:27,209
Porque, a ver, una vez que consigues ese

175
00:06:27,209 --> 00:06:29,790
concepto brillante en la pizarra, te enfrentas al

176
00:06:29,790 --> 00:06:31,990
problema del día a día, a la comunicación

177
00:06:31,990 --> 00:06:34,009
real durante los meses que dura el desarrollo.

178
00:06:34,410 --> 00:06:35,490
Ya, eso es otra historia.

179
00:06:35,870 --> 00:06:38,009
En la gran mayoría de los proyectos, vivimos

180
00:06:38,009 --> 00:06:41,170
atrapados en una especie de teléfono escacharrado permanente.

181
00:06:41,589 --> 00:06:42,670
¡Qué gran verdad!

182
00:06:42,949 --> 00:06:45,110
Es que es como pedir comida a domicilio

183
00:06:45,589 --> 00:06:45,990
con su jerga legal.

184
00:06:46,449 --> 00:06:48,709
Si el cliente llama y dice, no sé,

185
00:06:49,310 --> 00:06:51,410
deseo anular el contrato de abastecimiento.

186
00:06:51,610 --> 00:06:52,290
¡Madre mía!

187
00:06:52,490 --> 00:06:54,629
Claro, el restaurante no sabe si tiene que

188
00:06:54,629 --> 00:06:56,910
cancelar el pedido de patatas fritas o si

189
00:06:56,910 --> 00:06:58,629
tiene que despedir a su proveedor de carne,

190
00:06:58,769 --> 00:06:59,069
¿sabes?

191
00:06:59,069 --> 00:06:59,569
Claro, claro.

192
00:07:00,410 --> 00:07:03,509
Esa traducción intermedia es el lugar oscuro donde

193
00:07:03,509 --> 00:07:05,629
los errores y los bugs se esconden y

194
00:07:05,629 --> 00:07:06,889
se reproducen a sus anchas.

195
00:07:07,089 --> 00:07:09,910
Los expertos de negocio hablan su jerga logística

196
00:07:09,910 --> 00:07:11,930
o financiera en sus reuniones.

197
00:07:12,089 --> 00:07:12,269
Sí.

198
00:07:12,370 --> 00:07:14,790
Luego llegan los analistas de sistemas que lo

199
00:07:14,790 --> 00:07:17,509
traducen a su propia jerga de diagramas funcionales

200
00:07:17,509 --> 00:07:20,350
y finalmente los programadores cogen ese documento y

201
00:07:20,350 --> 00:07:21,949
lo vuelven a traducir a su jerga técnica.

202
00:07:22,269 --> 00:07:23,149
Hablar de tablas.

203
00:07:23,269 --> 00:07:26,370
Tablas de bases de datos, variables string, bucles

204
00:07:26,370 --> 00:07:27,790
for, es una locura.

205
00:07:27,910 --> 00:07:29,149
Es una locura, sí.

206
00:07:29,769 --> 00:07:32,410
Y el riesgo de esa traducción intermedia es

207
00:07:32,410 --> 00:07:35,730
que los fallos del modelo conceptual quedan completamente

208
00:07:35,730 --> 00:07:39,410
ocultos bajo unas capas inmensas de malentendidos.

209
00:07:39,649 --> 00:07:40,370
Ya te digo.

210
00:07:40,709 --> 00:07:43,269
Si cada estrato del equipo habla su propio

211
00:07:43,269 --> 00:07:45,529
idioma, pues nadie se da cuenta de que

212
00:07:45,529 --> 00:07:47,649
en realidad no se están entendiendo en absoluto

213
00:07:47,649 --> 00:07:49,310
y no se dan cuenta hasta que el

214
00:07:49,310 --> 00:07:50,670
software se despliega en producción.

215
00:07:50,790 --> 00:07:52,810
Y bueno, fracasas trepitosamente.

216
00:07:53,189 --> 00:07:54,290
El peor momento posible.

217
00:07:54,949 --> 00:07:55,430
Exacto.

218
00:07:55,569 --> 00:07:57,990
Así que la solución que propone el diseño

219
00:07:57,990 --> 00:08:00,410
guiado por el dominio para aniquilar este teléfono

220
00:08:00,410 --> 00:08:02,769
escacharrado es la instauración de lo que se

221
00:08:02,769 --> 00:08:06,449
conoce como el lenguaje Ubiquo, el Ubiquus Language.

222
00:08:06,889 --> 00:08:07,649
Eso es.

223
00:08:07,829 --> 00:08:10,490
Y la regla aquí es estricta y radical.

224
00:08:10,970 --> 00:08:12,449
Tiene que haber un idioma único.

225
00:08:12,449 --> 00:08:13,649
Un solo idioma.

226
00:08:13,750 --> 00:08:17,870
Un vocabulario que se construye basándose estrictamente en

227
00:08:17,870 --> 00:08:19,709
ese modelo de dominio que el equipo ha

228
00:08:19,709 --> 00:08:21,189
destilado en la pizarra, ¿no?

229
00:08:21,550 --> 00:08:24,050
Y ese vocabulario se debe usar de forma

230
00:08:24,050 --> 00:08:26,910
implacable e innegociable en todas partes.

231
00:08:27,129 --> 00:08:28,089
En todas partes.

232
00:08:28,329 --> 00:08:30,790
En las conversaciones de pasillo, en los documentos

233
00:08:30,790 --> 00:08:33,429
técnicos, en las reuniones con el cliente y

234
00:08:33,429 --> 00:08:35,850
lo que es infinitamente más crítico en el

235
00:08:35,850 --> 00:08:36,750
propio código fuente.

236
00:08:36,929 --> 00:08:39,090
A ver, vamos a desgranar esto poniéndonos un

237
00:08:39,090 --> 00:08:40,470
poco en la piel de un equipo real,

238
00:08:40,649 --> 00:08:42,090
porque es muy fácil decir.

239
00:08:42,450 --> 00:08:44,730
Hablemos todos el mismo idioma, pero es como

240
00:08:44,730 --> 00:08:47,629
intentar construir un edificio donde el arquitecto habla

241
00:08:47,629 --> 00:08:50,529
francés, el capataz japonés y solo se comunican

242
00:08:50,529 --> 00:08:51,970
mediante dibujos abstractos.

243
00:08:52,110 --> 00:08:53,070
Ya, es complicado.

244
00:08:53,509 --> 00:08:55,830
Pero ¿acaso no es natural que los expertos

245
00:08:55,830 --> 00:08:58,450
en negocio usen su jerga y los programadores

246
00:08:58,450 --> 00:08:58,990
la suya?

247
00:08:59,110 --> 00:09:01,070
O sea, romper con los hábitos de un

248
00:09:01,070 --> 00:09:03,309
programador que lleva diez años hablando de bases

249
00:09:03,309 --> 00:09:06,129
de datos para forzar un único idioma parece

250
00:09:06,129 --> 00:09:07,149
una tarea titánica.

251
00:09:07,230 --> 00:09:08,509
¿Por qué forzarlo tanto?

252
00:09:08,950 --> 00:09:11,730
Porque la sobrecarga de la traducción, como decíamos,

253
00:09:12,450 --> 00:09:13,149
oculta los fallos.

254
00:09:13,570 --> 00:09:15,929
Fíjate en la diferencia abismal de claridad con

255
00:09:15,929 --> 00:09:18,009
un ejemplo real que recogen los textos.

256
00:09:18,570 --> 00:09:21,029
Está centrado en el desarrollo de un sistema

257
00:09:21,029 --> 00:09:23,210
para una agencia de transporte de mercancías.

258
00:09:23,450 --> 00:09:24,929
El famoso cargo router.

259
00:09:25,529 --> 00:09:26,850
Exacto, el cargo router.

260
00:09:27,149 --> 00:09:29,470
Pues vamos a comparar dos formas de afrontar

261
00:09:29,470 --> 00:09:30,389
la misma petición.

262
00:09:30,529 --> 00:09:33,090
En el escenario tradicional de toda la vida,

263
00:09:33,169 --> 00:09:36,210
el usuario del negocio dice oye, si cambia

264
00:09:36,210 --> 00:09:37,850
la política de la aduana en un puerto,

265
00:09:37,950 --> 00:09:39,889
hay que rehacer la ruta del cargamento.

266
00:09:40,149 --> 00:09:40,990
Vale, lógico.

267
00:09:41,090 --> 00:09:43,950
Y el programador, pensando en su mundo técnico,

268
00:09:44,110 --> 00:09:48,830
responde vale, si ocurre ese evento, pues borraré

269
00:09:48,830 --> 00:09:51,110
las filas correspondientes en la tabla de la

270
00:09:51,110 --> 00:09:53,269
base de datos del MIOS y le pasaré

271
00:09:53,269 --> 00:09:55,649
los datos al servicio de backend para que

272
00:09:55,649 --> 00:09:57,710
la vuelva a poblar con la nueva información.

273
00:09:58,269 --> 00:10:00,750
Uf, me duele la cabeza solo de visualizar

274
00:10:00,750 --> 00:10:01,649
esa conversación.

275
00:10:01,870 --> 00:10:02,350
Es terrible.

276
00:10:02,669 --> 00:10:05,190
Están físicamente en la misma sala, pero habitan

277
00:10:05,190 --> 00:10:07,629
universos conceptuales totalmente distintos.

278
00:10:07,970 --> 00:10:09,649
O sea, si el negocio pide un cambio

279
00:10:09,649 --> 00:10:12,909
sutil sobre cómo funciona la aduana, el programador

280
00:10:12,909 --> 00:10:14,850
va a estar pensando en índices de tablas

281
00:10:14,850 --> 00:10:16,570
en lugar de pensar en barcos y en

282
00:10:16,570 --> 00:10:17,129
contenedores.

283
00:10:17,629 --> 00:10:18,190
Exactamente.

284
00:10:18,450 --> 00:10:20,610
Y ahora imagina la segunda conversación, donde el

285
00:10:20,610 --> 00:10:23,470
equipo ya ha implementado un lenguaje ubicua riguroso.

286
00:10:23,570 --> 00:10:26,570
A ver, el usuario dice exactamente lo mismo

287
00:10:26,570 --> 00:10:30,230
sobre la aduana y el programador responde usando

288
00:10:30,230 --> 00:10:33,889
el modelo y dice entendido, si cambias algún

289
00:10:33,889 --> 00:10:37,570
atributo en la especificación de la ruta, comprobaremos

290
00:10:37,570 --> 00:10:40,190
si el itinerario actual todavía la satisface.

291
00:10:40,309 --> 00:10:40,690
Ajá.

292
00:10:40,690 --> 00:10:43,950
Si no la satisface, generaremos un nuevo itinerario.

293
00:10:44,009 --> 00:10:44,730
Ostras, qué diferencia.

294
00:10:45,169 --> 00:10:46,909
Fíjate en el cambio de paradigma.

295
00:10:47,350 --> 00:10:50,870
Ambos están utilizando conceptos concretos y compartidos.

296
00:10:51,169 --> 00:10:54,509
Hablan de especificaciones de ruta y de itinerarios.

297
00:10:54,690 --> 00:10:55,509
Ya no hay filas.

298
00:10:55,570 --> 00:10:57,409
Ya no hay filas que se borran ni

299
00:10:57,409 --> 00:10:58,549
tablas que se pueblan.

300
00:10:58,570 --> 00:10:59,370
Nada de eso.

301
00:10:59,610 --> 00:11:02,149
Si el modelo conceptual tiene un fallo lógico,

302
00:11:02,210 --> 00:11:05,009
salta a la vista inmediatamente durante la charla,

303
00:11:05,029 --> 00:11:07,250
porque ambos están usando las mismas palabras.

304
00:11:07,570 --> 00:11:08,570
Claro, es transparente.

305
00:11:08,629 --> 00:11:10,570
Y la magia reside en que si un

306
00:11:10,570 --> 00:11:13,090
nuevo desarrollador abre el código, al día siguiente

307
00:11:13,090 --> 00:11:15,230
no verá variables genéricas.

308
00:11:15,269 --> 00:11:17,230
Va a haber clases y métodos que se

309
00:11:17,230 --> 00:11:21,330
llaman literalmente especificación de ruta e itinerario.

310
00:11:21,570 --> 00:11:23,889
Vale, vale, entiendo el inmenso valor de esto.

311
00:11:24,230 --> 00:11:26,330
Lograr hablar el mismo idioma en una sala

312
00:11:26,330 --> 00:11:28,789
de reuniones frente a un café, pues es

313
00:11:28,789 --> 00:11:29,370
un triunfo.

314
00:11:29,730 --> 00:11:31,210
Pero la realidad es tozuda.

315
00:11:31,690 --> 00:11:32,610
Sí lo es.

316
00:11:32,789 --> 00:11:34,889
Si ese modelo conceptual tan puro del que

317
00:11:34,889 --> 00:11:37,870
hablas no se traduce de forma literal, directa

318
00:11:37,870 --> 00:11:40,309
y sin fricciones al código, pues todo el

319
00:11:40,309 --> 00:11:42,789
esfuerzo de la pizarra no sirve absolutamente para

320
00:11:42,789 --> 00:11:43,950
nada, para nada.

321
00:11:44,169 --> 00:11:45,950
Y esto, fíjate, nos abre la puerta a

322
00:11:45,950 --> 00:11:48,370
un debate bastante candente en nuestra exploración de

323
00:11:48,370 --> 00:11:48,529
hoy.

324
00:11:48,970 --> 00:11:51,169
Esa unión indisoluble entre el modelo y la

325
00:11:51,169 --> 00:11:51,889
implementación.

326
00:11:51,909 --> 00:11:54,470
Y bueno, la polémica afirmación de que los

327
00:11:54,470 --> 00:11:57,269
programadores tienen que ser modeladores y viceversa.

328
00:11:57,309 --> 00:12:00,070
Es un punto de inflexión en cómo organizamos

329
00:12:00,070 --> 00:12:02,730
los equipos de tecnología en las empresas, porque

330
00:12:02,730 --> 00:12:05,289
desafía frontalmente una trampa mortal en la que

331
00:12:05,289 --> 00:12:07,750
ha caído nuestra industria durante muchos años.

332
00:12:07,990 --> 00:12:08,509
¿Cuál es?

333
00:12:08,850 --> 00:12:10,490
El modelo de la cadena de montaje.

334
00:12:10,629 --> 00:12:11,309
Ah, sí.

335
00:12:11,929 --> 00:12:15,230
Durante décadas se ha promovido esta idea organizativa

336
00:12:15,230 --> 00:12:18,149
de que debemos tener a unos arquitectos de

337
00:12:18,149 --> 00:12:22,070
software de élite super brillantes que diseñan los

338
00:12:22,070 --> 00:12:24,370
modelos conceptuales ahí arriba en su torre de

339
00:12:24,370 --> 00:12:24,809
marfil.

340
00:12:25,289 --> 00:12:25,830
Intocables.

341
00:12:26,009 --> 00:12:26,549
Eso es.

342
00:12:26,919 --> 00:12:28,990
Y luego, una vez que han terminado los

343
00:12:28,990 --> 00:12:31,929
planos, se los pasan a unos programadores rasos

344
00:12:31,929 --> 00:12:35,129
que, bueno, simplemente ensamblan el código como si

345
00:12:35,129 --> 00:12:37,990
fueran operarios apretando tuercas en una fábrica de

346
00:12:37,990 --> 00:12:38,269
coches.

347
00:12:38,409 --> 00:12:39,110
Pero espera, espera.

348
00:12:39,289 --> 00:12:41,090
Esto va un poco en contra de todo

349
00:12:41,090 --> 00:12:43,250
lo que acompaña a la industrialización, ¿no?

350
00:12:43,350 --> 00:12:44,090
A ver.

351
00:12:44,429 --> 00:12:46,429
La intuición más básica nos grita que la

352
00:12:46,429 --> 00:12:49,029
especialización extrema es lo que trae la eficiencia.

353
00:12:49,289 --> 00:12:52,289
O sea, Henry Ford revolucionó el mundo así.

354
00:12:52,509 --> 00:12:55,289
No es un desperdicio absoluto de presupuesto y

355
00:12:55,289 --> 00:12:57,809
de talento que un arquitecto de sistemas de

356
00:12:57,809 --> 00:13:00,490
altísimo nivel que cobra un dineral se ponga

357
00:13:00,490 --> 00:13:02,509
a escribir código mundano del día a día.

358
00:13:02,649 --> 00:13:05,049
Pues la intuición nos dice eso, efectivamente.

359
00:13:05,789 --> 00:13:09,149
Pero aplicarlo al software es una falacia enorme,

360
00:13:09,549 --> 00:13:10,049
enorme.

361
00:13:10,490 --> 00:13:11,049
¿Por qué?

362
00:13:11,929 --> 00:13:14,129
En la construcción tradicional o en la fábrica

363
00:13:14,129 --> 00:13:16,669
de coches, el plano no es el producto,

364
00:13:16,970 --> 00:13:19,990
pero en el desarrollo de software todo es

365
00:13:19,990 --> 00:13:20,470
diseño.

366
00:13:20,549 --> 00:13:23,330
El código fuente no es el ensamblaje, es

367
00:13:23,330 --> 00:13:25,149
el diseño final en sí mismo.

368
00:13:25,470 --> 00:13:26,629
Qué interesante verlo así.

369
00:13:26,929 --> 00:13:29,509
Los documentos exponen un caso que es tristemente

370
00:13:29,509 --> 00:13:32,870
habitual, donde un equipo tenía esta separación jerárquica

371
00:13:32,870 --> 00:13:33,429
estricta.

372
00:13:33,509 --> 00:13:37,690
Los modeladores estrella hicieron un trabajo excelente, pero

373
00:13:37,690 --> 00:13:39,230
claro, en sus cabezas.

374
00:13:39,309 --> 00:13:40,029
En la teoría.

375
00:13:40,029 --> 00:13:45,129
Pasaron meses diseñando unos diagramas UML inmensos, preciosos,

376
00:13:45,149 --> 00:13:47,350
que parecían obras de arte de la lógica

377
00:13:47,350 --> 00:13:47,909
de negocio.

378
00:13:48,269 --> 00:13:50,269
Pero en el momento en que un programador

379
00:13:50,269 --> 00:13:53,090
de esa cadena de montaje intentó convertir esos

380
00:13:53,090 --> 00:13:55,309
dibujos en código real, se estrelló.

381
00:13:55,409 --> 00:13:59,129
Se estrelló violentamente contra las limitaciones de la

382
00:13:59,129 --> 00:14:00,610
base de datos y de la red.

383
00:14:00,809 --> 00:14:03,350
Como los arquitectos no bajaban a la trinchera

384
00:14:03,350 --> 00:14:05,909
a tocar el código, pues nunca recibieron el

385
00:14:05,909 --> 00:14:08,870
feedback empílico de esas limitaciones tecnológicas.

386
00:14:10,029 --> 00:14:12,210
El papel lo aguanta todo, pero el ordenador

387
00:14:12,210 --> 00:14:12,450
no.

388
00:14:12,710 --> 00:14:13,269
Exacto.

389
00:14:13,269 --> 00:14:16,590
El modelo colapsó y el proyecto fracasó estrepitosamente.

390
00:14:16,929 --> 00:14:19,509
La conclusión del diseño guiado por el dominio

391
00:14:19,509 --> 00:14:20,870
aquí es innegociable.

392
00:14:21,149 --> 00:14:23,769
Todo el que modela debe tocar código y

393
00:14:23,769 --> 00:14:26,230
todo el que programa debe entender y participar

394
00:14:26,230 --> 00:14:28,590
activamente en la evolución del modelo.

395
00:14:28,769 --> 00:14:30,789
Tienen que ser modeladores prácticos.

396
00:14:31,070 --> 00:14:32,129
Hands on modelers.

397
00:14:32,330 --> 00:14:32,830
Eso es.

398
00:14:32,970 --> 00:14:35,090
Tienen que mancharse las manos de barro, básicamente.

399
00:14:35,830 --> 00:14:38,450
Pero claro, para que un desarrollador pueda expresar

400
00:14:38,450 --> 00:14:40,610
un modelo de negocio de forma tan limpia

401
00:14:40,610 --> 00:14:43,629
en el código, sin volverse loco intentando que

402
00:14:43,629 --> 00:14:47,529
funcione en una pantalla, la propia arquitectura técnica

403
00:14:47,529 --> 00:14:49,149
del sistema tiene que ponérselo fácil.

404
00:14:49,490 --> 00:14:50,149
Totalmente.

405
00:14:50,269 --> 00:14:52,610
Tiene que haber como un muro de contención,

406
00:14:52,610 --> 00:14:52,730
¿no?

407
00:14:52,850 --> 00:14:55,169
Y ese muro de contención es lo que

408
00:14:55,169 --> 00:14:57,529
conocemos como arquitectura en capas.

409
00:14:57,529 --> 00:14:59,350
La famosa layered architecture.

410
00:14:59,809 --> 00:15:00,090
Vale.

411
00:15:00,539 --> 00:15:02,830
Si quieres que tu código hable ese lenguaje

412
00:15:02,830 --> 00:15:06,490
ubicuo, tienes que aislar físicamente el dominio.

413
00:15:06,730 --> 00:15:07,389
¿Aislarlo?

414
00:15:07,450 --> 00:15:07,610
Sí.

415
00:15:07,649 --> 00:15:09,950
Que es la capa donde viven única y

416
00:15:09,950 --> 00:15:11,950
exclusivamente las reglas de negocio.

417
00:15:12,470 --> 00:15:15,269
Tienes que separarlo de todas las demás preocupaciones

418
00:15:15,269 --> 00:15:16,049
tecnológicas.

419
00:15:16,269 --> 00:15:18,490
Separarlo de la interfaz de usuario, de la

420
00:15:18,490 --> 00:15:21,450
base de datos, del envío de correos electrónicos,

421
00:15:21,450 --> 00:15:22,210
de la red.

422
00:15:22,350 --> 00:15:22,669
Todo.

423
00:15:22,830 --> 00:15:24,169
Claro, porque si mezclas...

424
00:15:24,169 --> 00:15:25,830
Es que si el código que calcula si

425
00:15:25,830 --> 00:15:28,009
un cliente tiene derecho a un descuento está

426
00:15:28,009 --> 00:15:30,889
mezclado en el mismo archivo con las consultas

427
00:15:30,889 --> 00:15:32,990
SQL a la base de datos o con

428
00:15:32,990 --> 00:15:35,309
el código que pinta un botón rojo en

429
00:15:35,309 --> 00:15:38,389
el navegador, es literalmente imposible que ese código

430
00:15:38,389 --> 00:15:40,889
refleje nítidamente el modelo de negocio.

431
00:15:41,070 --> 00:15:43,470
Esto es fundamental para entender por qué los

432
00:15:43,470 --> 00:15:45,250
sistemas se vuelven incomprensibles.

433
00:15:45,649 --> 00:15:48,610
Pero ¿cómo se ve este aislamiento en la

434
00:15:48,610 --> 00:15:49,070
práctica?

435
00:15:49,629 --> 00:15:51,809
Me gustaría entender cómo se saca a la

436
00:15:51,809 --> 00:15:54,210
luz una de esas reglas de negocio vitales

437
00:15:54,210 --> 00:15:56,950
que suelen estar enterradas bajo toneladas de código

438
00:15:56,950 --> 00:15:57,450
técnico.

439
00:15:57,690 --> 00:16:00,429
Pues hay un ejemplo cristalino de los textos,

440
00:16:00,429 --> 00:16:01,950
que es la política de overbooking.

441
00:16:02,090 --> 00:16:03,049
Ah, la sobreventa.

442
00:16:03,090 --> 00:16:05,809
Sí, la sobreventa en el sector del transporte

443
00:16:05,809 --> 00:16:06,210
marítimo.

444
00:16:06,330 --> 00:16:09,269
En este negocio es una regla estratégica crucial

445
00:16:09,269 --> 00:16:12,409
permitir que un barco de carga acepte reservas

446
00:16:12,409 --> 00:16:14,129
hasta un 10 por ciento por encima de

447
00:16:14,129 --> 00:16:15,789
su capacidad física máxima.

448
00:16:15,809 --> 00:16:17,149
Porque siempre hay cancelaciones.

449
00:16:17,330 --> 00:16:20,070
Porque saben estadísticamente que siempre hay cancelaciones de

450
00:16:20,070 --> 00:16:20,610
última hora.

451
00:16:20,669 --> 00:16:21,169
Exacto.

452
00:16:21,169 --> 00:16:23,830
Bueno, pues en el sistema heredado antiguo, esta

453
00:16:23,830 --> 00:16:26,070
regla de negocio vital para la rentabilidad de

454
00:16:26,070 --> 00:16:27,350
la empresa estaba oculta.

455
00:16:27,350 --> 00:16:27,610
¿Dónde?

456
00:16:27,769 --> 00:16:30,389
Estaba oculta como un simple y triste cálculo

457
00:16:30,389 --> 00:16:35,309
matemático, un capacidad por 1 .1, embutido en

458
00:16:35,309 --> 00:16:38,450
medio de un gigantesco método que guardaba datos

459
00:16:38,450 --> 00:16:38,950
en la base.

460
00:16:39,669 --> 00:16:42,470
Imagina ser un experto en logística marítima que

461
00:16:42,470 --> 00:16:43,590
intenta auditar ese código.

462
00:16:44,309 --> 00:16:47,509
Llegas, ves un asterisco, ves un 1 .1

463
00:16:47,509 --> 00:16:50,129
y piensas, pero ¿qué demonios es esto?

464
00:16:50,370 --> 00:16:51,190
Un misterio.

465
00:16:51,309 --> 00:16:54,309
Es un impuesto portuario, una tasa de conversión

466
00:16:54,309 --> 00:16:54,750
de moneda.

467
00:16:54,870 --> 00:16:57,909
Esa línea no significa absolutamente nada para el

468
00:16:57,909 --> 00:16:58,250
negocio.

469
00:16:58,409 --> 00:17:00,429
Y si alguien, no sé, cambia ese 1

470
00:17:00,429 --> 00:17:03,409
.1 por un 1 .2 por error, la

471
00:17:03,409 --> 00:17:05,890
empresa puede perder millones sin que nadie se

472
00:17:05,890 --> 00:17:06,250
dé cuenta.

473
00:17:06,250 --> 00:17:07,369
Exacto.

474
00:17:07,369 --> 00:17:09,369
Es un peligro constante.

475
00:17:09,829 --> 00:17:12,509
Y al aplicar los principios de esta filosofía,

476
00:17:12,569 --> 00:17:15,589
lo que hicieron los desarrolladores fue extraer ese

477
00:17:15,589 --> 00:17:19,230
oscuro cálculo matemático y crearon un objeto explícito

478
00:17:19,230 --> 00:17:21,190
y con nombre propio en la capa de

479
00:17:21,190 --> 00:17:21,750
dominio.

480
00:17:21,869 --> 00:17:22,730
¿Y cómo lo llamaron?

481
00:17:22,910 --> 00:17:26,009
Lo bautizaron literalmente como política de overbooking.

482
00:17:26,230 --> 00:17:27,190
Qué claridad.

483
00:17:27,369 --> 00:17:29,950
De repente, esa regla de negocio tiene su

484
00:17:29,950 --> 00:17:31,630
propio espacio físico en el código.

485
00:17:31,869 --> 00:17:33,390
Es visible para todos.

486
00:17:33,509 --> 00:17:36,230
Se puede probar matemáticamente de forma aislada.

487
00:17:36,250 --> 00:17:38,009
Sin tener que levantar toda la base de

488
00:17:38,009 --> 00:17:38,250
datos.

489
00:17:38,430 --> 00:17:39,529
Claro, mucho más rápido.

490
00:17:39,769 --> 00:17:42,809
Y lo más importante, es comprensible y auditable.

491
00:17:43,029 --> 00:17:46,369
El conocimiento implícito del negocio se transformó por

492
00:17:46,369 --> 00:17:48,930
fin en un artefacto de software explícito.

493
00:17:49,210 --> 00:17:51,130
Vale, entiendo el proceso perfectamente.

494
00:17:51,369 --> 00:17:53,349
Ya hemos aislado nuestro modelo en una capa

495
00:17:53,349 --> 00:17:53,690
pura.

496
00:17:53,710 --> 00:17:56,009
Todos hablamos el lenguaje ubicuo y no hay

497
00:17:56,009 --> 00:17:58,430
ni rastro de esa jerga técnica mezclada con

498
00:17:58,430 --> 00:18:00,369
nuestras reglas de logística o de finanzas.

499
00:18:00,630 --> 00:18:01,289
Eso es.

500
00:18:01,490 --> 00:18:03,450
Pero a ver, bajando un peldaño más hacia

501
00:18:03,450 --> 00:18:06,250
la sala de máquinas, ¿qué forma toman las

502
00:18:06,250 --> 00:18:07,150
piezas de código puro?

503
00:18:07,230 --> 00:18:09,470
Porque no todo en la vida real se

504
00:18:09,470 --> 00:18:10,069
comporte igual.

505
00:18:10,250 --> 00:18:12,369
No todo puede ser simplemente un objeto genérico

506
00:18:12,369 --> 00:18:13,490
sin más definición, ¿verdad?

507
00:18:13,670 --> 00:18:14,269
No, no.

508
00:18:14,470 --> 00:18:16,569
Tiene que haber matices para representar la realidad.

509
00:18:16,930 --> 00:18:17,410
Totalmente.

510
00:18:17,470 --> 00:18:21,069
El enfoque nos proporciona unas herramientas de categorización

511
00:18:21,069 --> 00:18:22,609
muy precisas para esto.

512
00:18:23,250 --> 00:18:25,549
Desglosa los conceptos del mundo real en tres

513
00:18:25,549 --> 00:18:28,089
bloques de construcción principales dentro del dominio.

514
00:18:28,589 --> 00:18:29,710
A ver, ¿cuáles son?

515
00:18:30,190 --> 00:18:32,950
Son las entidades, los objetos de valor y

516
00:18:32,950 --> 00:18:33,430
los servicios.

517
00:18:33,809 --> 00:18:34,190
Vale.

518
00:18:34,690 --> 00:18:36,130
Empecemos definiendo las entidades.

519
00:18:36,250 --> 00:18:39,549
O entities son aquellas cosas fundamentales del negocio

520
00:18:39,549 --> 00:18:42,269
que tienen un hilo de identidad constante a

521
00:18:42,269 --> 00:18:43,009
través del tiempo.

522
00:18:43,210 --> 00:18:44,329
Una identidad.

523
00:18:44,410 --> 00:18:47,009
Sí, sin importar en absoluto si sus atributos

524
00:18:47,009 --> 00:18:48,009
internos cambian.

525
00:18:48,089 --> 00:18:49,470
Por ejemplo, un cliente humano.

526
00:18:49,710 --> 00:18:52,009
Un cliente puede cambiar de número de teléfono

527
00:18:52,009 --> 00:18:54,490
móvil, puede mudarse de ciudad o incluso cambiar

528
00:18:54,490 --> 00:18:56,849
su nombre legal, pero para el sistema sigue

529
00:18:56,849 --> 00:18:59,210
siendo exactamente el mismo individuo único.

530
00:18:59,529 --> 00:19:00,849
Se le rastrea por un ID.

531
00:19:01,089 --> 00:19:04,230
Eso es rastreado mediante un número de identificación

532
00:19:04,230 --> 00:19:05,009
inmutable.

533
00:19:05,269 --> 00:19:05,730
Vale.

534
00:19:06,250 --> 00:19:07,690
La entidad tiene una historia de vida.

535
00:19:08,029 --> 00:19:10,349
Pero a ver, ¿qué pasa con aquellas cosas

536
00:19:10,349 --> 00:19:11,930
que no tienen un ciclo de vida que

537
00:19:11,930 --> 00:19:13,089
nos interese rastrear?

538
00:19:13,549 --> 00:19:15,829
Si yo registro, por ejemplo, una dirección de

539
00:19:15,829 --> 00:19:18,529
envío en ese perfil del cliente, a mí

540
00:19:18,529 --> 00:19:20,009
no me importa la historia de la calle

541
00:19:20,009 --> 00:19:21,789
ni que otros clientes viven allí.

542
00:19:22,230 --> 00:19:24,509
Solo me importan los datos de esa dirección

543
00:19:24,509 --> 00:19:25,750
en este momento concreto.

544
00:19:26,210 --> 00:19:26,690
Exacto.

545
00:19:26,690 --> 00:19:29,369
¿Cómo modelamos eso sin sobrecargar la memoria del

546
00:19:29,369 --> 00:19:31,630
sistema con identidades inútiles?

547
00:19:31,970 --> 00:19:34,630
Pues precisamente ahí es donde entran los objetos

548
00:19:34,630 --> 00:19:36,150
de valor o value objects.

549
00:19:36,250 --> 00:19:39,390
Son elementos que usamos puramente para describir las

550
00:19:39,390 --> 00:19:42,210
características de algo, pero que carecen de una

551
00:19:42,210 --> 00:19:45,309
identidad propia que debamos o queramos rastrear a

552
00:19:45,309 --> 00:19:45,950
través del tiempo.

553
00:19:46,210 --> 00:19:47,049
Solo atributos.

554
00:19:47,490 --> 00:19:50,049
Simplemente nos importa la combinación de sus atributos,

555
00:19:50,150 --> 00:19:50,309
sí.

556
00:19:50,490 --> 00:19:52,930
Entonces, a ver, para asentar bien este concepto

557
00:19:52,930 --> 00:19:53,670
que me parece crucial.

558
00:19:54,069 --> 00:19:56,490
Si lo entiendo bien, una entidad es como

559
00:19:56,490 --> 00:19:58,029
un billete de avión a mi nombre.

560
00:19:58,269 --> 00:19:58,750
Me gusta.

561
00:19:58,970 --> 00:20:01,509
Si de repente la aerolínea cambia la fecha

562
00:20:01,509 --> 00:20:03,950
del vuelo o me reasignan la puerta de

563
00:20:03,950 --> 00:20:06,109
embarque o incluso me cambian de asiento.

564
00:20:06,630 --> 00:20:08,089
Sigo siendo yo el pasajero.

565
00:20:08,430 --> 00:20:11,630
Ese billete en particular tiene mi identidad atada

566
00:20:11,630 --> 00:20:13,390
a él y tiene un ciclo de vida

567
00:20:13,390 --> 00:20:15,109
que la aerolínea debe seguir con lupa.

568
00:20:15,329 --> 00:20:15,970
Sí, sí.

569
00:20:16,069 --> 00:20:18,069
Pero un objeto de valor es como, no

570
00:20:18,069 --> 00:20:20,049
sé, un billete de diez euros que llevo

571
00:20:20,049 --> 00:20:20,630
en el bolsillo.

572
00:20:20,789 --> 00:20:23,349
Me da absolutamente igual qué billete físico sea.

573
00:20:23,829 --> 00:20:24,269
Totalmente.

574
00:20:24,470 --> 00:20:25,970
No me importa ni su número de serie

575
00:20:25,970 --> 00:20:27,970
ni en qué carteras ha estado antes.

576
00:20:28,250 --> 00:20:30,049
Solo me importa su valor intrínseco.

577
00:20:30,269 --> 00:20:31,910
Si yo te doy un billete de diez

578
00:20:31,910 --> 00:20:34,150
euros para pagar algo y tú, por algún

579
00:20:34,150 --> 00:20:36,230
motivo, me devuelves otro billete de diez euros,

580
00:20:36,250 --> 00:20:38,349
totalmente distinto, estamos en paz.

581
00:20:38,450 --> 00:20:40,230
Son 100 % intercambiables.

582
00:20:40,549 --> 00:20:42,190
Esa analogía es perfecta.

583
00:20:42,250 --> 00:20:42,809
Fíjate.

584
00:20:42,829 --> 00:20:45,630
Y fíjate en el desastre que ocurre si

585
00:20:45,630 --> 00:20:48,210
nos equivocamos con esa distinción del billete a

586
00:20:48,210 --> 00:20:48,930
nivel técnico.

587
00:20:49,069 --> 00:20:49,609
¿Qué pasaría?

588
00:20:49,890 --> 00:20:52,410
Pues que no es solo un debate filosófico

589
00:20:52,410 --> 00:20:53,450
para entretenernos.

590
00:20:53,890 --> 00:20:56,869
Tiene unas consecuencias enormes en el rendimiento del

591
00:20:56,869 --> 00:20:57,190
código.

592
00:20:57,930 --> 00:20:59,849
Si tú obligas a tu sistema de software

593
00:20:59,849 --> 00:21:01,890
a tratar a todos los billetes de diez

594
00:21:01,890 --> 00:21:05,390
euros como entidades, estarías forzando a la base

595
00:21:05,390 --> 00:21:07,890
de datos para generar un identificador único para

596
00:21:07,890 --> 00:21:08,549
cada billete.

597
00:21:08,609 --> 00:21:09,630
Uf, qué locura.

598
00:21:10,089 --> 00:21:13,009
Rastreando su historia individual, sus cambios de estado

599
00:21:13,009 --> 00:21:14,690
y su ciclo de vida por todos los

600
00:21:14,690 --> 00:21:15,490
módulos del programa.

601
00:21:15,809 --> 00:21:17,049
El servidor explota.

602
00:21:17,190 --> 00:21:20,250
Es un desperdicio colosal de recursos de computación

603
00:21:20,250 --> 00:21:23,269
y convierte el sistema en una maraña hipercompleja.

604
00:21:24,170 --> 00:21:26,289
Tratarlo como un objeto de valor que se

605
00:21:26,289 --> 00:21:28,329
puede crear y destruir a voluntad sin dejar

606
00:21:28,329 --> 00:21:31,549
rastro, simplifica enormemente la arquitectura.

607
00:21:31,750 --> 00:21:32,750
Mucho más ligero.

608
00:21:33,009 --> 00:21:33,569
Muchísimo.

609
00:21:34,230 --> 00:21:36,230
Y luego tenemos el tercer bloque, que son

610
00:21:36,230 --> 00:21:36,809
los servicios.

611
00:21:37,130 --> 00:21:42,349
A ver, estos representan acciones, procesos o transformaciones

612
00:21:42,349 --> 00:21:45,690
que no tienen un estado propio que guardar

613
00:21:45,690 --> 00:21:48,230
y que no encajan de forma natural, ni

614
00:21:48,230 --> 00:21:50,490
en la definición de una entidad, ni en

615
00:21:50,490 --> 00:21:51,630
la de un objeto de valor.

616
00:21:52,150 --> 00:21:55,049
Piensa, por ejemplo, en una operación de transferencia

617
00:21:55,049 --> 00:21:57,250
de fondos entre dos cuentas bancarias.

618
00:21:58,130 --> 00:22:00,369
Forzar a la cuenta A a tener un

619
00:22:00,369 --> 00:22:02,789
método que se llame, no sé, transferirse a

620
00:22:02,789 --> 00:22:05,250
sí misma a la cuenta B resulta forzado

621
00:22:05,250 --> 00:22:06,549
y poco natural para un banquero.

622
00:22:06,730 --> 00:22:07,730
No hablan así, ¿no?

623
00:22:07,869 --> 00:22:10,690
La transferencia es un proceso del dominio con

624
00:22:10,690 --> 00:22:14,170
entidad propia, con sus propias reglas de seguridad

625
00:22:14,170 --> 00:22:15,349
y de auditoría.

626
00:22:15,410 --> 00:22:18,109
Así que se modela como un servicio explícito.

627
00:22:18,289 --> 00:22:18,789
Entendido.

628
00:22:18,890 --> 00:22:22,150
Y finalmente, bueno, para evitar que miles de

629
00:22:22,150 --> 00:22:25,369
estas entidades, valores y servicios se conviertan en

630
00:22:25,369 --> 00:22:27,869
un caos visual cuando el sistema crece a

631
00:22:27,869 --> 00:22:30,369
escala empresarial, utilizamos los módulos.

632
00:22:30,470 --> 00:22:31,009
Para ordenar.

633
00:22:31,170 --> 00:22:34,549
Piensa en los módulos como los grandes capítulos

634
00:22:34,549 --> 00:22:35,710
temáticos del libro.

635
00:22:35,730 --> 00:22:37,630
Que cuentan la historia de tu sistema.

636
00:22:38,410 --> 00:22:42,069
Agrupan conceptos que son altamente cohesivos entre sí,

637
00:22:42,170 --> 00:22:46,109
separando de forma hermética el módulo de facturación

638
00:22:46,109 --> 00:22:48,710
del módulo de envíos internacionales, por ejemplo.

639
00:22:48,970 --> 00:22:50,170
Muy clarificador, la verdad.

640
00:22:50,430 --> 00:22:52,069
Tenemos las piezas en el tablero.

641
00:22:52,150 --> 00:22:54,849
Entidades, valores, servicios y módulos.

642
00:22:55,069 --> 00:22:55,569
Eso es.

643
00:22:55,670 --> 00:22:58,309
Pero claro, estas piezas no viven congeladas en

644
00:22:58,309 --> 00:22:58,690
el tiempo.

645
00:22:58,849 --> 00:23:01,269
Como decíamos con el billete de avión, estas

646
00:23:01,269 --> 00:23:04,710
estructuras nacen, sufren cambios súper complejos por parte

647
00:23:04,710 --> 00:23:05,410
de los usuarios.

648
00:23:05,730 --> 00:23:08,089
Y bueno, eventualmente son archivadas o borradas.

649
00:23:08,230 --> 00:23:09,210
Tienen un ciclo.

650
00:23:09,410 --> 00:23:11,509
Gestionar cómo nacen y cómo se recuperan los

651
00:23:11,509 --> 00:23:13,690
datos sin que la lógica de negocio se

652
00:23:13,690 --> 00:23:15,630
llene de ese tódigo basura de bases de

653
00:23:15,630 --> 00:23:17,869
datos, pues es un reto monumental, ¿no?

654
00:23:17,930 --> 00:23:18,470
Lo es.

655
00:23:18,569 --> 00:23:20,789
Y para gestionar ese ciclo de vida sin

656
00:23:20,789 --> 00:23:23,869
corromper el modelo puro, el diseño introduce tres

657
00:23:23,869 --> 00:23:25,190
patrones muy concretos.

658
00:23:25,349 --> 00:23:28,869
Los arregados, las fábricas y los repositorios.

659
00:23:29,069 --> 00:23:29,910
Vamos uno a uno.

660
00:23:30,049 --> 00:23:30,509
Vale.

661
00:23:30,670 --> 00:23:34,190
Un agregado o aggregate es la solución para

662
00:23:34,190 --> 00:23:35,710
mantener la coherencia de los datos.

663
00:23:36,250 --> 00:23:38,309
Piensa en un agregado como el bloque de

664
00:23:38,309 --> 00:23:39,430
un motor de combustión.

665
00:23:39,529 --> 00:23:40,009
Vale.

666
00:23:40,130 --> 00:23:42,509
Tú no permites que un mecánico aficionado intente

667
00:23:42,509 --> 00:23:45,390
ajustar el tiempo de los pistones internos empujándolos

668
00:23:45,390 --> 00:23:47,329
directamente con la mano desde fuera, ¿verdad?

669
00:23:47,569 --> 00:23:48,049
No, claro.

670
00:23:48,589 --> 00:23:49,430
Romperías el motor.

671
00:23:49,789 --> 00:23:50,269
Exacto.

672
00:23:50,910 --> 00:23:52,730
Interactúas con el motor a través de una

673
00:23:52,730 --> 00:23:56,289
interfaz controlada, pues el agregado agrupa múltiples objetos,

674
00:23:56,589 --> 00:23:58,750
como por ejemplo un pedido y sus líneas

675
00:23:58,750 --> 00:24:01,509
de pedido, y asegura que nadie modifique las

676
00:24:01,509 --> 00:24:04,269
partes internas saltándose las reglas globales.

677
00:24:04,329 --> 00:24:05,490
Las invariantes, que llaman.

678
00:24:05,490 --> 00:24:05,970
Eso es.

679
00:24:06,109 --> 00:24:07,769
Mantener las invariantes.

680
00:24:08,289 --> 00:24:11,430
Por ejemplo, garantizando que el total del pedido

681
00:24:11,430 --> 00:24:14,450
siempre coincida matemáticamente con la suma de sus

682
00:24:14,450 --> 00:24:14,970
líneas.

683
00:24:15,309 --> 00:24:16,130
Tiene sentido.

684
00:24:16,789 --> 00:24:19,490
Y para ensamblar este motor complejo desde cero,

685
00:24:19,529 --> 00:24:21,589
sin que el resto del programa tenga que

686
00:24:21,589 --> 00:24:24,910
conocer los detalles sucios de fabricación, utilizamos el

687
00:24:24,910 --> 00:24:26,529
patrón de fábricas, las factories.

688
00:24:26,910 --> 00:24:27,250
Vale.

689
00:24:27,430 --> 00:24:30,470
Y finalmente, el puente hacia el almacenamiento a

690
00:24:30,470 --> 00:24:32,450
largo plazo son los repositorios.

691
00:24:32,670 --> 00:24:34,230
Un momento, un momento.

692
00:24:34,230 --> 00:24:36,890
Vamos a ser un poco escépticos aquí con

693
00:24:36,890 --> 00:24:37,930
lo de los repositorios.

694
00:24:38,029 --> 00:24:38,329
A ver.

695
00:24:39,130 --> 00:24:41,869
Un repositorio no es simplemente una forma elegante,

696
00:24:41,930 --> 00:24:45,470
abstracta y, francamente, un poco pedante de llamar

697
00:24:45,470 --> 00:24:47,349
a una consulta SQL de toda la vida

698
00:24:47,349 --> 00:24:48,269
a la base de datos.

699
00:24:48,589 --> 00:24:49,589
Ya, latífica duda.

700
00:24:49,950 --> 00:24:52,369
Es decir, haz un select y tráeme los

701
00:24:52,369 --> 00:24:53,750
datos de la tabla clientes.

702
00:24:53,890 --> 00:24:55,910
¿Por qué disfrazarlo con un nombre nuevo?

703
00:24:56,150 --> 00:24:57,710
A ver, entiendo la provocación.

704
00:24:58,309 --> 00:24:59,970
Pero para entender por qué no es una

705
00:24:59,970 --> 00:25:02,890
simple consulta con un sombrero elegante, hay que

706
00:25:02,890 --> 00:25:04,210
mirar el daño psicológico del cliente.

707
00:25:04,230 --> 00:25:06,730
Fíjate, el daño psicológico que hace el SQL

708
00:25:06,730 --> 00:25:08,349
directo en el código de negocio.

709
00:25:08,809 --> 00:25:09,289
¿Psicológico?

710
00:25:09,410 --> 00:25:09,970
Sí, sí.

711
00:25:10,210 --> 00:25:12,970
Si tú haces una consulta SQL tradicional o

712
00:25:12,970 --> 00:25:15,730
usas herramientas básicas de bases de datos, el

713
00:25:15,730 --> 00:25:18,869
sistema te devuelve datos crudos, desmembrados.

714
00:25:18,950 --> 00:25:19,190
Cierto.

715
00:25:19,369 --> 00:25:22,269
Te devuelve filas, te devuelve columnas y tipos

716
00:25:22,269 --> 00:25:22,970
primitivos.

717
00:25:23,829 --> 00:25:26,529
Psicológicamente, eso empuja al desarrollador a dejar de

718
00:25:26,529 --> 00:25:28,690
pensar en reglas de negocio y empezar a

719
00:25:28,690 --> 00:25:30,730
pensar en cómo cruzar tablas relacionales.

720
00:25:30,829 --> 00:25:31,170
Ah, claro.

721
00:25:31,349 --> 00:25:32,410
Te cambia el marco mental.

722
00:25:33,069 --> 00:25:33,549
Exactamente.

723
00:25:33,549 --> 00:25:33,650
Exactamente.

724
00:25:33,710 --> 00:25:36,390
Un repositorio, en cambio, te devuelve un objeto

725
00:25:36,390 --> 00:25:40,009
del dominio rico, un agregado completamente formado y

726
00:25:40,009 --> 00:25:43,890
listo para funcionar, con todos sus comportamientos matemáticos

727
00:25:43,890 --> 00:25:44,970
intactos.

728
00:25:45,109 --> 00:25:45,789
Ya montado.

729
00:25:45,930 --> 00:25:48,609
El repositorio actúa como un ilusionista que oculta

730
00:25:48,609 --> 00:25:50,509
por completo la infraestructura técnica.

731
00:25:50,890 --> 00:25:51,690
Qué buena imagen.

732
00:25:52,329 --> 00:25:55,349
El desarrollador que usa el repositorio de clientes

733
00:25:55,349 --> 00:25:58,549
no sabe ni le debería importar en absoluto

734
00:25:58,549 --> 00:26:01,150
si por debajo hay una base de datos

735
00:26:01,150 --> 00:26:04,890
Oracle carísima, un simple archivo de texto o

736
00:26:04,890 --> 00:26:06,269
un microservicio en la nube.

737
00:26:06,730 --> 00:26:10,349
Él sigue pensando exclusivamente en términos del lenguaje

738
00:26:10,349 --> 00:26:10,809
ubicuo.

739
00:26:11,089 --> 00:26:13,029
O sea, la base de datos debe servir

740
00:26:13,029 --> 00:26:15,130
a tus reglas de negocio, no al revés.

741
00:26:15,269 --> 00:26:15,869
Eso es.

742
00:26:15,990 --> 00:26:17,970
Si dejas que la base de datos dicte

743
00:26:17,970 --> 00:26:20,450
cómo se escriben tus reglas, pues terminas con

744
00:26:20,450 --> 00:26:21,970
un sistema súper rígido.

745
00:26:22,109 --> 00:26:23,930
Y supongo que esto es lo que permite

746
00:26:23,930 --> 00:26:26,730
alcanzar ese codiciado estado que el texto llama

747
00:26:26,730 --> 00:26:29,269
diseño flexible, el Supple Design, ¿no?

748
00:26:29,450 --> 00:26:30,009
Exacto.

749
00:26:30,049 --> 00:26:32,730
Porque si aíslas todo lo técnico, culminas en

750
00:26:32,730 --> 00:26:35,289
un código con interfaces que, bueno, revelan la

751
00:26:35,289 --> 00:26:35,769
intención.

752
00:26:35,890 --> 00:26:38,769
Al leer el código, estás leyendo exactamente qué

753
00:26:38,769 --> 00:26:41,069
está haciendo la política del negocio, mientras el

754
00:26:41,069 --> 00:26:43,730
cómo técnico está cuidadosamente escondido.

755
00:26:43,849 --> 00:26:46,829
Cuando alcanzas ese nivel, es que un desarrollador

756
00:26:46,829 --> 00:26:49,269
recién incorporado puede leer el código de la

757
00:26:49,269 --> 00:26:52,150
capa de dominio casi como si estuviera leyendo

758
00:26:52,150 --> 00:26:53,809
el manual de operaciones de la empresa.

759
00:26:54,130 --> 00:26:54,789
Sin ruido.

760
00:26:54,849 --> 00:26:58,049
Sin tropezar con detalles sobre conexiones a bases

761
00:26:58,049 --> 00:26:59,650
de datos o bucles de red.

762
00:26:59,930 --> 00:27:01,009
Todo fluye.

763
00:27:01,210 --> 00:27:01,769
Pero claro.

764
00:27:02,009 --> 00:27:04,089
Tenemos que aterrizar esto en la cruda realidad

765
00:27:04,089 --> 00:27:05,349
económica de las empresas.

766
00:27:05,609 --> 00:27:08,609
Aplicar absolutamente todas estas tácticas, este nivel de

767
00:27:08,609 --> 00:27:12,450
pureza arquitectónica, pulir el lenguaje ubicuo con reuniones

768
00:27:12,450 --> 00:27:16,150
interminables, destilar entidades, crear repositorios perfectos.

769
00:27:16,230 --> 00:27:17,250
Es mucho trabajo.

770
00:27:17,650 --> 00:27:20,109
Intentar aplicar esto a un sistema corporativo gigante

771
00:27:20,109 --> 00:27:22,589
de arriba abajo es literalmente suicida.

772
00:27:22,690 --> 00:27:27,430
Hay demasiadas piezas, demasiadas pantallas, procesos intrascendentes.

773
00:27:27,549 --> 00:27:29,750
Si un equipo intenta modelar todo el universo

774
00:27:29,750 --> 00:27:32,349
de la empresa con esta profundidad se hundirán

775
00:27:32,349 --> 00:27:34,549
en tiempo y quemarán todo el presupuesto en

776
00:27:34,549 --> 00:27:35,369
el primer año fijo.

777
00:27:35,630 --> 00:27:36,150
Seguro.

778
00:27:36,190 --> 00:27:38,789
Entiendo que aquí es donde entra la necesidad

779
00:27:38,789 --> 00:27:41,089
de una estrategia un poco más despiadada, ¿no?

780
00:27:41,210 --> 00:27:44,430
Y aquí entramos en el verdadero corazón estratégico

781
00:27:44,430 --> 00:27:45,349
de esta filosofía.

782
00:27:45,569 --> 00:27:48,690
Un concepto que Evans llama la destilación.

783
00:27:48,910 --> 00:27:49,509
A ver.

784
00:27:49,710 --> 00:27:52,890
El éxito rotundo o el fracaso estrepitoso de

785
00:27:52,890 --> 00:27:55,430
un proyecto de software a gran escala depende

786
00:27:55,430 --> 00:27:58,369
casi enteramente de la capacidad del equipo directivo

787
00:27:58,369 --> 00:28:02,289
y técnico para identificar el core domain, el

788
00:28:02,289 --> 00:28:02,289
principal.

789
00:28:02,470 --> 00:28:03,589
¿Y qué es exactamente?

790
00:28:04,069 --> 00:28:07,470
Esta es esa parte minúscula, pero altamente compleja

791
00:28:07,470 --> 00:28:10,069
del software que realmente diferencia a la empresa

792
00:28:10,069 --> 00:28:10,990
de sus competidores.

793
00:28:11,599 --> 00:28:13,869
Es, digamos, la joya de la corona que

794
00:28:13,869 --> 00:28:15,650
aporta un valor estratégico único.

795
00:28:15,990 --> 00:28:16,789
Lo que da dinero.

796
00:28:17,250 --> 00:28:17,869
Exacto.

797
00:28:18,319 --> 00:28:20,750
Todo lo demás que compone el inmenso sistema

798
00:28:20,750 --> 00:28:24,109
informático corporativo son subdominios genéricos.

799
00:28:24,250 --> 00:28:25,009
Ah, vale.

800
00:28:25,230 --> 00:28:28,950
Cosas como un organigrama de empleados, un sistema

801
00:28:28,950 --> 00:28:32,549
de autenticación de usuarios mediante contraseñas, o no

802
00:28:32,549 --> 00:28:34,789
sé, un módulo de contabilidad estándar.

803
00:28:35,170 --> 00:28:38,730
Son infraestructuras que son absolutamente necesarias para que

804
00:28:38,730 --> 00:28:39,690
la empresa funcione.

805
00:28:40,150 --> 00:28:42,190
Sí, pero no son el núcleo de tu

806
00:28:42,190 --> 00:28:43,069
modelo de negocio.

807
00:28:43,109 --> 00:28:45,190
No te hacen ganar contra tu competencia.

808
00:28:45,349 --> 00:28:47,130
Entonces, si lo aplicamos al mundo real.

809
00:28:47,289 --> 00:28:50,130
A ver, si estamos construyendo el sistema central

810
00:28:50,130 --> 00:28:53,509
para un gran hospital pionero, pues el core

811
00:28:53,509 --> 00:28:57,369
domain serían sin duda esos algoritmos ultra complejos

812
00:28:57,369 --> 00:29:00,990
de triaje predictivo de urgencias que salvan vidas.

813
00:29:02,869 --> 00:29:04,589
Eso es el núcleo, sí.

814
00:29:04,730 --> 00:29:07,069
En cambio, el módulo para gestionar, no sé,

815
00:29:07,150 --> 00:29:09,670
las nóminas del personal de limpieza o del

816
00:29:09,670 --> 00:29:12,829
servicio de cafetería sería un subdominio genérico.

817
00:29:13,210 --> 00:29:13,730
Exactamente.

818
00:29:13,970 --> 00:29:16,569
Lo ideal sería comprar un software de nóminas

819
00:29:16,569 --> 00:29:18,150
ya hecho, o en el peor de los

820
00:29:18,150 --> 00:29:20,670
casos, pues no poner a los tres mejores

821
00:29:20,670 --> 00:29:22,930
y más caros arquitectos de software del hospital

822
00:29:22,930 --> 00:29:25,289
a programar un gestor de nóminas desde cero,

823
00:29:25,329 --> 00:29:25,549
¿verdad?

824
00:29:25,710 --> 00:29:27,329
El ejemplo es perfecto.

825
00:29:27,430 --> 00:29:29,769
Pero la realidad empírica en la industria del

826
00:29:29,769 --> 00:29:31,849
software, y esto es algo sobre lo que

827
00:29:31,849 --> 00:29:33,210
los médicos y los textos nos advierten de

828
00:29:33,210 --> 00:29:36,390
forma muy severa y reiterada, es que debido

829
00:29:36,390 --> 00:29:38,950
a dinámicas humanas un poco tóxicas, a menudo

830
00:29:38,950 --> 00:29:40,230
ocurre exactamente lo contrario.

831
00:29:40,569 --> 00:29:41,190
No me digas.

832
00:29:41,329 --> 00:29:41,869
Sí, sí.

833
00:29:42,049 --> 00:29:45,309
Los mejores desarrolladores de un equipo, los veteranos

834
00:29:45,309 --> 00:29:47,950
que cobran más, muchas veces huyen del barro

835
00:29:47,950 --> 00:29:49,569
del negocio y se van a jugar con

836
00:29:49,569 --> 00:29:50,930
tecnologías de infraestructura.

837
00:29:51,009 --> 00:29:51,490
Por ego.

838
00:29:51,670 --> 00:29:55,250
Por puro ego técnico, sí, o para engordar

839
00:29:55,250 --> 00:29:56,049
su currículum.

840
00:29:56,509 --> 00:30:00,589
Les apasiona construir frameworks abstractos o trastear con

841
00:30:00,589 --> 00:30:03,609
el último sistema de mensajería distribuida y dejan

842
00:30:03,609 --> 00:30:06,049
la responsabilidad de programar el modelo crítico de

843
00:30:06,049 --> 00:30:08,990
negocio en manos de los programadores junior que

844
00:30:08,990 --> 00:30:10,210
acaban de llegar a la empresa.

845
00:30:10,509 --> 00:30:12,089
A los que no se atreven a rechistar,

846
00:30:12,089 --> 00:30:12,309
claro.

847
00:30:12,809 --> 00:30:14,210
Exacto, a los novatos.

848
00:30:14,369 --> 00:30:16,910
Pero es una negligencia tremenda si lo piensas.

849
00:30:17,230 --> 00:30:19,809
O sea, es como poner al arquitecto estrella

850
00:30:19,809 --> 00:30:22,009
que ha ganado premios internacionales a diseñar el

851
00:30:22,009 --> 00:30:23,609
grosor de las tuberías de los baños.

852
00:30:23,809 --> 00:30:24,250
Tal cual.

853
00:30:24,470 --> 00:30:26,789
Y dejar que el becario recién graduado calcule

854
00:30:26,789 --> 00:30:28,710
los cimientos y la estructura de carga del

855
00:30:28,710 --> 00:30:29,349
rascacielos.

856
00:30:29,490 --> 00:30:33,069
Es una tragedia silenciosa que, de verdad, destruye

857
00:30:33,069 --> 00:30:33,930
empresas enteras.

858
00:30:34,349 --> 00:30:37,049
El libro relata con mucha frustración un caso

859
00:30:37,049 --> 00:30:41,690
real donde un desarrollador senior absolutamente brillante dedicó

860
00:30:41,690 --> 00:30:44,230
varios meses de trabajo a construir un sistema

861
00:30:44,230 --> 00:30:46,670
periférico para gestionar comentarios de usuarios.

862
00:30:47,029 --> 00:30:48,490
Comentarios, madre mía.

863
00:30:49,269 --> 00:30:51,109
Sí, es un trabajo precioso.

864
00:30:51,289 --> 00:30:56,250
Una arquitectura súper flexible, genérica y técnicamente deslumbrante.

865
00:30:56,430 --> 00:30:56,849
Pero.

866
00:30:56,950 --> 00:30:59,329
Pero mientras él se divertía con eso, un

867
00:30:59,329 --> 00:31:01,930
programador muy inexperto estaba a cargo del módulo

868
00:31:01,930 --> 00:31:04,190
central de evaluación de préstamos de la entidad

869
00:31:04,190 --> 00:31:04,809
financiera.

870
00:31:04,869 --> 00:31:05,369
Ostras.

871
00:31:05,589 --> 00:31:08,609
Que era el verdadero y único motor de

872
00:31:08,609 --> 00:31:09,630
ingresos del negocio.

873
00:31:09,769 --> 00:31:11,089
Claro, lo importante de verdad.

874
00:31:11,390 --> 00:31:14,170
Pues ese programador inexperto convirtió la lógica de

875
00:31:14,170 --> 00:31:17,250
préstamos en un enredo incomprensible, súper rígido y

876
00:31:17,250 --> 00:31:18,130
lleno de errores.

877
00:31:18,309 --> 00:31:20,329
La elección de la destilación aquí es brutal.

878
00:31:20,630 --> 00:31:23,089
Todo el esfuerzo genial y los mejores cerebros

879
00:31:23,089 --> 00:31:26,410
de la empresa deben ir dirigidos, sin contemplaciones

880
00:31:26,410 --> 00:31:28,349
ni excusas, al core domain.

881
00:31:28,630 --> 00:31:29,670
Ahí es donde te la juegas.

882
00:31:29,789 --> 00:31:30,789
Ahí es donde te juegas.

883
00:31:30,789 --> 00:31:32,190
Más la supervivencia y el éxito.

884
00:31:32,309 --> 00:31:35,089
Pues es una bofetada de realidad tremenda para

885
00:31:35,089 --> 00:31:35,690
la industria.

886
00:31:35,930 --> 00:31:38,109
Y creo que este último punto nos ofrece

887
00:31:38,109 --> 00:31:41,549
la plataforma perfecta para una reflexión final brillante,

888
00:31:41,569 --> 00:31:43,930
sobre todo nuestro análisis a fondo de hoy.

889
00:31:44,470 --> 00:31:47,410
Lo que verdaderamente nos demuestra la filosofía del

890
00:31:47,410 --> 00:31:49,730
diseño guiado por el dominio es que la

891
00:31:49,730 --> 00:31:52,470
ingeniería de software, cuando se practica en su

892
00:31:52,470 --> 00:31:54,910
nivel más alto y profesional, pues no trata

893
00:31:54,910 --> 00:31:56,269
realmente sobre ordenadores.

894
00:31:56,430 --> 00:31:57,049
Para nada.

895
00:31:57,309 --> 00:31:59,529
No va a describir ceros y unos más

896
00:31:59,529 --> 00:32:02,269
rápido, ni de usar el lenguaje de programación

897
00:32:02,269 --> 00:32:03,049
más novedoso.

898
00:32:03,150 --> 00:32:07,430
Trata sobre enfrentarse y comprender profundamente la asombrosa

899
00:32:07,430 --> 00:32:10,710
complejidad y, bueno, el desorden del conocimiento del

900
00:32:10,710 --> 00:32:11,210
mundo real.

901
00:32:11,390 --> 00:32:12,529
Del caos humano, sí.

902
00:32:12,690 --> 00:32:15,529
Ya estemos hablando de sistemas inabarcables, de envíos

903
00:32:15,529 --> 00:32:19,609
globales, de modelos de derivados financieros súper complejos

904
00:32:19,609 --> 00:32:23,109
o del diseño físico de hardware electrónico, pues

905
00:32:23,109 --> 00:32:24,970
el verdadero y más noble trabajo de un

906
00:32:24,970 --> 00:32:28,289
creador de software es empaparse de ese caos

907
00:32:28,289 --> 00:32:29,710
humano y destilarlo.

908
00:32:30,789 --> 00:32:34,150
En ideas puras, comunicables, claras y útiles.

909
00:32:34,450 --> 00:32:36,029
Es que es un cambio de paradigma total

910
00:32:36,029 --> 00:32:37,849
para cualquier profesional de la tecnología.

911
00:32:38,150 --> 00:32:41,049
El código fuente es solamente el medio de

912
00:32:41,049 --> 00:32:41,690
expresión.

913
00:32:41,730 --> 00:32:43,430
Digamos, es la tinta en el papel.

914
00:32:44,009 --> 00:32:46,609
El fin último y genuino es la captura

915
00:32:46,609 --> 00:32:49,890
y el modelado del conocimiento humano para, pues

916
00:32:49,890 --> 00:32:51,910
eso, para resolver problemas reales.

917
00:32:52,089 --> 00:32:54,690
Así que a quienes nos escuchan hoy, tanto

918
00:32:54,690 --> 00:32:57,930
si sois desarrolladores como analistas o directores de

919
00:32:57,930 --> 00:33:01,069
tecnología, os invitamos a hacer un pequeño pero

920
00:33:01,069 --> 00:33:03,589
revelador ejercicio mañana cuando lleguéis al trabajo.

921
00:33:03,809 --> 00:33:04,710
A ver si se atreven.

922
00:33:05,029 --> 00:33:05,589
Sí.

923
00:33:05,789 --> 00:33:08,269
Mirad el software que sostiene vuestras empresas.

924
00:33:08,569 --> 00:33:10,930
Abrid una parte crítica del código fuente o

925
00:33:10,930 --> 00:33:13,150
hablad diez minutos con el equipo de desarrollo

926
00:33:13,150 --> 00:33:16,309
y hacéos en silencio esta simple y poderosa

927
00:33:16,309 --> 00:33:16,589
pregunta.

928
00:33:17,069 --> 00:33:19,430
¿Habla de verdad este código el rico idioma

929
00:33:19,430 --> 00:33:21,730
de nuestro negocio y de nuestros expertos o

930
00:33:21,730 --> 00:33:24,109
sólo está balbuceando el frío y genérico idioma

931
00:33:24,109 --> 00:33:24,769
de las máquinas?

932
00:33:24,930 --> 00:33:27,170
La honestidad de esa respuesta os dirá muchísimo

933
00:33:27,170 --> 00:33:28,630
sobre el futuro a largo plazo de ese

934
00:33:28,630 --> 00:33:28,930
proyecto.

935
00:33:29,250 --> 00:33:31,509
Antes de despedirnos hasta el próximo programa, os

936
00:33:31,509 --> 00:33:33,250
informamos de que las voces que oyeis han

937
00:33:33,250 --> 00:33:35,130
sido generadas por la IA de Notebook LM

938
00:33:35,130 --> 00:33:37,650
y que dirigiendo el podcast se encuentra Julio

939
00:33:37,650 --> 00:33:39,809
Pablo Vázquez, un humano que te envía saludos.

940
00:33:39,829 --> 00:33:41,930
En caso de error, probablemente sean errores humanos.

941
00:33:42,190 --> 00:33:43,130
Nos escuchamos.

942
00:33:54,069 --> 00:33:56,190
Y hasta aquí el episodio de hoy.

943
00:33:56,309 --> 00:33:58,170
Muchas gracias por tu atención.

944
00:34:07,750 --> 00:34:09,530
Esto es BIMPRAXIS.

945
00:34:09,809 --> 00:34:12,329
Nos escuchamos en el próximo episodio.

