Skip to content

Commit e81610e

Browse files
committed
added deployments
1 parent fc2d874 commit e81610e

File tree

4 files changed

+279
-50
lines changed

4 files changed

+279
-50
lines changed

docs/search-index.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/sitemap.xml

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2,182 +2,182 @@
22
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
33
<url>
44
<loc>https://elixircl.github.io/elixir-fullstack/abstract.html</loc>
5-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
5+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
66
</url>
77
<url>
88
<loc>https://elixircl.github.io/elixir-fullstack/afterword.html</loc>
9-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
9+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
1010
</url>
1111
<url>
1212
<loc>https://elixircl.github.io/elixir-fullstack/authors.html</loc>
13-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
13+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
1414
</url>
1515
<url>
1616
<loc>https://elixircl.github.io/elixir-fullstack/bibliography.html</loc>
17-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
17+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
1818
</url>
1919
<url>
2020
<loc>https://elixircl.github.io/elixir-fullstack/book.html</loc>
21-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
21+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
2222
</url>
2323
<url>
2424
<loc>https://elixircl.github.io/elixir-fullstack/colophon.html</loc>
25-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
25+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
2626
</url>
2727
<url>
2828
<loc>https://elixircl.github.io/elixir-fullstack/dedication.html</loc>
29-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
29+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
3030
</url>
3131
<url>
3232
<loc>https://elixircl.github.io/elixir-fullstack/devops/devenvs.html</loc>
33-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
33+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
3434
</url>
3535
<url>
3636
<loc>https://elixircl.github.io/elixir-fullstack/devops/dora.html</loc>
37-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
37+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
3838
</url>
3939
<url>
4040
<loc>https://elixircl.github.io/elixir-fullstack/devops/golden.html</loc>
41-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
41+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
4242
</url>
4343
<url>
4444
<loc>https://elixircl.github.io/elixir-fullstack/devops/observability.html</loc>
45-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
45+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
4646
</url>
4747
<url>
4848
<loc>https://elixircl.github.io/elixir-fullstack/ecosystem/jobs.html</loc>
49-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
49+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
5050
</url>
5151
<url>
5252
<loc>https://elixircl.github.io/elixir-fullstack/ecosystem/llm.html</loc>
53-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
53+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
5454
</url>
5555
<url>
5656
<loc>https://elixircl.github.io/elixir-fullstack/ecosystem/web.html</loc>
57-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
57+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
5858
</url>
5959
<url>
6060
<loc>https://elixircl.github.io/elixir-fullstack/elixir/apirest.html</loc>
61-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
61+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
6262
</url>
6363
<url>
6464
<loc>https://elixircl.github.io/elixir-fullstack/elixir/commands.html</loc>
65-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
65+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
6666
</url>
6767
<url>
6868
<loc>https://elixircl.github.io/elixir-fullstack/elixir/elixir.html</loc>
69-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
69+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
7070
</url>
7171
<url>
7272
<loc>https://elixircl.github.io/elixir-fullstack/elixir/liveview.html</loc>
73-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
73+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
7474
</url>
7575
<url>
7676
<loc>https://elixircl.github.io/elixir-fullstack/elixir/testing.html</loc>
77-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
77+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
7878
</url>
7979
<url>
8080
<loc>https://elixircl.github.io/elixir-fullstack/foreword.html</loc>
81-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
81+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
8282
</url>
8383
<url>
8484
<loc>https://elixircl.github.io/elixir-fullstack/games/games.html</loc>
85-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
85+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
8686
</url>
8787
<url>
8888
<loc>https://elixircl.github.io/elixir-fullstack/github/chapter.html</loc>
89-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
89+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
9090
</url>
9191
<url>
9292
<loc>https://elixircl.github.io/elixir-fullstack/glossary.html</loc>
93-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
93+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
9494
</url>
9595
<url>
9696
<loc>https://elixircl.github.io/elixir-fullstack/history/chapter.html</loc>
97-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
97+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
9898
</url>
9999
<url>
100100
<loc>https://elixircl.github.io/elixir-fullstack/hosting/chapter.html</loc>
101-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
101+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
102102
</url>
103103
<url>
104104
<loc>https://elixircl.github.io/elixir-fullstack/html/chapter.html</loc>
105-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
105+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
106106
</url>
107107
<url>
108108
<loc>https://elixircl.github.io/elixir-fullstack/http/chapter.html</loc>
109-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
109+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
110110
</url>
111111
<url>
112112
<loc>https://elixircl.github.io/elixir-fullstack/index.html</loc>
113-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
113+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
114114
</url>
115115
<url>
116116
<loc>https://elixircl.github.io/elixir-fullstack/javascript/chapter.html</loc>
117-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
117+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
118118
</url>
119119
<url>
120120
<loc>https://elixircl.github.io/elixir-fullstack/mobile/chapter.html</loc>
121-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
121+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
122122
</url>
123123
<url>
124124
<loc>https://elixircl.github.io/elixir-fullstack/mobile/punteo.html</loc>
125-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
125+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
126126
</url>
127127
<url>
128128
<loc>https://elixircl.github.io/elixir-fullstack/mobile/pwa.html</loc>
129-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
129+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
130130
</url>
131131
<url>
132132
<loc>https://elixircl.github.io/elixir-fullstack/networking/chapter.html</loc>
133-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
133+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
134134
</url>
135135
<url>
136136
<loc>https://elixircl.github.io/elixir-fullstack/security/cryptography.html</loc>
137-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
137+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
138138
</url>
139139
<url>
140140
<loc>https://elixircl.github.io/elixir-fullstack/security/security.html</loc>
141-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
141+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
142142
</url>
143143
<url>
144144
<loc>https://elixircl.github.io/elixir-fullstack/swe/adr.html</loc>
145-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
145+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
146146
</url>
147147
<url>
148148
<loc>https://elixircl.github.io/elixir-fullstack/swe/deprecation.html</loc>
149-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
149+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
150150
</url>
151151
<url>
152152
<loc>https://elixircl.github.io/elixir-fullstack/swe/patterns.html</loc>
153-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
153+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
154154
</url>
155155
<url>
156156
<loc>https://elixircl.github.io/elixir-fullstack/swe/prd.html</loc>
157-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
157+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
158158
</url>
159159
<url>
160160
<loc>https://elixircl.github.io/elixir-fullstack/swe/roles.html</loc>
161-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
161+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
162162
</url>
163163
<url>
164164
<loc>https://elixircl.github.io/elixir-fullstack/swe/stages.html</loc>
165-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
165+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
166166
</url>
167167
<url>
168168
<loc>https://elixircl.github.io/elixir-fullstack/swe/uat.html</loc>
169-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
169+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
170170
</url>
171171
<url>
172172
<loc>https://elixircl.github.io/elixir-fullstack/swe/wow.html</loc>
173-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
173+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
174174
</url>
175175
<url>
176176
<loc>https://elixircl.github.io/elixir-fullstack/syllabus.html</loc>
177-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
177+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
178178
</url>
179179
<url>
180180
<loc>https://elixircl.github.io/elixir-fullstack/systemd/chapter.html</loc>
181-
<lastmod>2025-11-04T17:04:53.855Z</lastmod>
181+
<lastmod>2025-11-04T18:43:36.076Z</lastmod>
182182
</url>
183183
</urlset>

docs/swe/wow.html

Lines changed: 141 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -349,10 +349,10 @@ <h2 id="trabajo-remoto"><a class="anchor" href="#trabajo-remoto"></a>Trabajo Rem
349349
<h2 id="sherpa"><a class="anchor" href="#sherpa"></a>Sherpa</h2>
350350
<div class="sectionbody">
351351
<div class="paragraph">
352-
<p>Existe un rol de "Sherpa" que se encarga de monitorear los sistemas y resolver problemas en
352+
<p>Existe un rol de "<a href="https://es.wikipedia.org/wiki/Sherpa">Sherpa</a>" que se encarga de monitorear los sistemas y resolver problemas en
353353
horarios extraordinarios. Los cuales deben ser adecuadamente compensados según acuerdo entre
354354
empleador y Sherpa. Referencia: Algunas empresas pagan un bono de 80 USD por semana de sherpaje.
355-
La semana es distribuida entre un equipo de 4 personas.
355+
La carga laboral mensual es distribuida entre un equipo de 4 personas, es decir un Sherpa por semana.
356356
El rol de Sherpa es necesario para brindar un aseguramiento de la calidad de las soluciones,
357357
además de que puede asistir para resolver dudas o problemas de todos los sistemas que esté
358358
monitoreando. El Sherpa necesariamente debe ser de un miembro del equipo técnico capacitado para
@@ -879,6 +879,145 @@ <h2 id="roles"><a class="anchor" href="#roles"></a>Roles</h2>
879879
</table>
880880
</div>
881881
</div>
882+
<div class="sect1">
883+
<h2 id="estrategia-comunicacional"><a class="anchor" href="#estrategia-comunicacional"></a>Estrategia Comunicacional</h2>
884+
<div class="sectionbody">
885+
<div class="paragraph">
886+
<p>Para permitir una mejor comunicación entre los miembros del equipo y todos los interesados.
887+
Se recomiendan los siguientes canales, los cuales pueden ser implementados dentro de cualquier
888+
plataforma de colaboración como Slack, Teams, Zulip, Mattermost, entre otras.</p>
889+
</div>
890+
<div class="paragraph">
891+
<p>Adicionalmente se recomienda la presencia de un chatbot que permita automatizar ciertas
892+
operaciones, tanto de gestión del canal como de facilidad para realizar tareas rutinarias.</p>
893+
</div>
894+
<div class="paragraph">
895+
<p>Para permitir mejor la separación de los canales, se definirán los siguientes conceptos:</p>
896+
</div>
897+
<div class="ulist">
898+
<ul>
899+
<li>
900+
<p>Proyecto: El proyecto es una solución compuesta por uno o más productos de software.</p>
901+
</li>
902+
<li>
903+
<p>Producto: El producto de software es un elemento específico como backend, frontend o varios subproductos combinados. Esto depende de la organización y el equipo de desarrollo que elementos son considerados como un producto.</p>
904+
</li>
905+
<li>
906+
<p>Artefacto: El artefacto es un componente del producto, puede ser código, documentación o herramienta asociada.</p>
907+
</li>
908+
</ul>
909+
</div>
910+
<div class="sect2">
911+
<h3 id="canales-convesacionales"><a class="anchor" href="#canales-convesacionales"></a>Canales Convesacionales</h3>
912+
<div class="paragraph">
913+
<p>Los canales conversacionales son necesarios para ayudar en la coordinación de distintos colaboradores e interesados.
914+
Queda a criterio de la empresa determinar si se necesita otros adicionales, pero como mínimo se recomiendan los siguientes:</p>
915+
</div>
916+
<div class="ulist">
917+
<ul>
918+
<li>
919+
<p>Canal General del Proyecto (#&lt;proyecto&gt;): En este canal estarán los EM, los PO, los Stakeholders y si es viable también un representante directo del cliente.
920+
Este es un canal para discutir eventos relacionados al proyecto como hitos, reuniones o detalles necesarios que afecten a todos los equipos del proyecto.</p>
921+
</li>
922+
<li>
923+
<p>Canal de Todos los Equipos de Desarrollo del Proyecto (#&lt;proyecto&gt;-devs): Este canal estarán solamente los equipos asociados al desarrollo del proyecto, los stakeholders y los PO. Puede haber miembros de equipos distintos para backend, frontend, qa, etc.
924+
Normalmente utilizado para compartir novedades y lineamientos pertinentes a todos los equipos relacionados al proyecto en específico. Son todos los equipos asociados a varios productos. Por lo que también sirve como contacto principal entre los distintos equipos
925+
para solicitar información adicional.</p>
926+
</li>
927+
<li>
928+
<p>Canal de Un Equipo en Específico (#&lt;teamNN&gt;): Este canal solo estarán los miembros del equipo de desarrollo y su EM respectivo. Ideal para reuniones y coordinación interna.
929+
Se recomienda que cada equipo contribuya para tener un nombre común (Los Cóndores, Los Huemules, etc) y generar un sentido de identidad y pertenencia. Un equipo puede tener uno o más productos a su cargo y estar asociado a uno o más proyectos.</p>
930+
</li>
931+
<li>
932+
<p>Canal de un Producto Específico (#&lt;proyecto&gt;-&lt;producto&gt;): En este canal están presentes el PO, El EM y el Equipo de Desarollo asociado al producto.
933+
También puede ser usado como principal fuente de resolver dudas acerca del producto que miembros de otros equipos necesiten.</p>
934+
</li>
935+
</ul>
936+
</div>
937+
</div>
938+
<div class="sect2">
939+
<h3 id="canales-de-notificaciones"><a class="anchor" href="#canales-de-notificaciones"></a>Canales de Notificaciones</h3>
940+
<div class="paragraph">
941+
<p>Adicionalmente a los canales conversacionales donde los colaboradores interactúan entre sí,
942+
debe existir canales de notificaciones pensados para enviar alertas y mensajes asociados
943+
a un proyecto y producto en específico. Estas alertas son enviadas por los procesos de monitoreo y herramientas de CI/CD.</p>
944+
</div>
945+
<div class="ulist">
946+
<ul>
947+
<li>
948+
<p>#&lt;proyecto&gt;-&lt;producto&gt;-deployments: Notificaciones relacionadas a un producto específico. Puede ser un backend o un frontend o la combinación de varios subproductos en uno solo. La idea es recibir todo lo relativo a los despliegues (dev, staging, prod) y poder tener una trazabilidad de su estado o autorizar los pasos a producción.</p>
949+
</li>
950+
<li>
951+
<p>#&lt;proyecto&gt;-&lt;producto&gt;-warnings: Notificaciones relacionadas a un producto específico. Son advertencias que deben ser monitoreadas por el Sherpa asociada al estado de servidores o servicios. Por ejemplo puede salir un alerta de que el CPU esta pasando el 70% de saturación. No son críticas, pero se debe prestar atención.</p>
952+
</li>
953+
<li>
954+
<p>#&lt;proyecto&gt;-&lt;producto&gt;-alerts: Notificaciones Críticas. Se ha detectado un fallo que debe ser reparado lo más pronto posible. Se ha notificado al Sherpa y al EM.</p>
955+
</li>
956+
</ul>
957+
</div>
958+
<div class="sect3">
959+
<h4 id="despliegues"><a class="anchor" href="#despliegues"></a>Despliegues</h4>
960+
<div class="paragraph">
961+
<p>Para comprender mejor los despliegues y sus notificaciones se definirán a continuación:</p>
962+
</div>
963+
<div class="sect4">
964+
<h5 id="local"><a class="anchor" href="#local"></a>local</h5>
965+
<div class="paragraph">
966+
<p>No se realiza despliegue, por lo que no hay notificaciones,
967+
ya que solo son cambios en el computador local del colaborador.</p>
968+
</div>
969+
</div>
970+
<div class="sect4">
971+
<h5 id="dev"><a class="anchor" href="#dev"></a>dev</h5>
972+
<div class="paragraph">
973+
<p>Se realiza un despliegue al servidor <code>develop</code> cada vez que se crea un nuevo Pull
974+
Request en Github. Se realizan las pruebas automáticas y si son válidas, se crea una nueva instancia de servidor con recursos limitados y mínimos (URL única, dura 1 hora) que
975+
permite validar los cambios por los interesados. Una vez aprobado el estado de <code>dev</code>,
976+
puede ser pasado a <code>staging</code> según resultados de la revisión (utilizando un Squash Merge a main,
977+
pasando todas las pruebas automáticas y code reviews). La notificación de
978+
"Nuevo Servidor de Dev para PR #1234" se envía al canal deployments.</p>
979+
</div>
980+
</div>
981+
<div class="sect4">
982+
<h5 id="staging"><a class="anchor" href="#staging"></a>staging</h5>
983+
<div class="paragraph">
984+
<p>Los cambios pasan a un ambiente de <code>staging</code> donde se pueden validar en conjunción con otros
985+
cambios de otros miembros del equipo. Una vez aprobado el estado de <code>staging</code> debe ser
986+
pasado a <code>prod</code>. Solamente el código de la rama <code>main</code> que ha pasado todas las pruebas automaticas
987+
puede pasar cambios a <code>staging</code>, es decir cada vez que se haga un cambio en la rama main se
988+
despliega a <code>staging</code> y se envía una notificación.</p>
989+
</div>
990+
</div>
991+
<div class="sect4">
992+
<h5 id="prod"><a class="anchor" href="#prod"></a>prod</h5>
993+
<div class="paragraph">
994+
<p>Es el estado productivo donde el cliente final puede usar el sistema.
995+
Solo puede ser modificado mediante un despliegue desde <code>staging</code> y una aprobación manual por
996+
alguien con la autorización necesaria. La notificación anterior de despliegue a <code>staging</code>
997+
puede contener un botón para "Promover a Producción". Lo que gatillará una nueva
998+
notificación con la trazabilidad del despliegue. También considerar que se puede realizar
999+
un "Rollback" de los despliegues a una versión estable anterior en el caso de que una versión de producción cause
1000+
conflictos o se detecte problemas graves.</p>
1001+
</div>
1002+
<div class="paragraph">
1003+
<p>Considerar que los despliegues a producción pueden ser "congelados" por un periodo de tiempo
1004+
determinado según los criterios de la organización y el equipo de desarrollo estimen convenientes.</p>
1005+
</div>
1006+
<div class="paragraph">
1007+
<p>También considerar la estrategia de despliegue, por ejemplo en una estrategia de despliegue
1008+
del tipo "Canary" los servidores productivos son desplegados en partes pequeñas (nodos) y si se detecta
1009+
un margen de error considerable se realiza un rollback automático.</p>
1010+
</div>
1011+
<div class="paragraph">
1012+
<p>El despliegue a <code>prod</code>, crea un nuevo tag en los repositorios de los artefactos relacionados.
1013+
Lo que permite volver a una versión anterior si es necesario. La versión utiliza <code>SemVer</code>
1014+
con un número final incrementado automáticamente por cada commit a <code>main</code>.</p>
1015+
</div>
1016+
</div>
1017+
</div>
1018+
</div>
1019+
</div>
1020+
</div>
8821021
<nav class="pagination">
8831022
<span class="prev"><a href="prd.html">Documento de Requerimiento de Producto (Product Requirement Document - PRD)</a></span>
8841023
<span class="next"><a href="uat.html">Pruebas de Aceptación de Usuario (User Aceptance Testing - UAT)</a></span>

0 commit comments

Comments
 (0)