{"id":2874,"date":"2024-09-16T16:00:57","date_gmt":"2024-09-16T14:00:57","guid":{"rendered":"https:\/\/blog.joppy.me\/?p=2874"},"modified":"2024-09-16T16:50:03","modified_gmt":"2024-09-16T14:50:03","slug":"how-to-implement-a-scalable-architecture-across-multiple-platforms","status":"publish","type":"post","link":"https:\/\/blog.joppy.me\/es\/how-to-implement-a-scalable-architecture-across-multiple-platforms\/","title":{"rendered":"C\u00f3mo implementar una arquitectura escalable en m\u00faltiples plataformas (Openbank)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Desarrollar la mayor plataforma bancaria actual, que abarca m\u00e1s de 160 millones de clientes, m\u00e1s de diez mercados y a la que contribuyen equipos de desarrollo de distintas geograf\u00edas es un desaf\u00edo que exige una arquitectura a la altura.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Introducci\u00f3n<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En ODS, a lo largo de los a\u00f1os, hemos aprendido que la correcta implementaci\u00f3n de una arquitectura nos permite escalar tanto en complejidad como en n\u00famero de proyectos de una forma m\u00e1s \u00e1gil. Incluso cuando esto supone una curva de aprendizaje m\u00e1s elevada para quien se incorpora al equipo. En este articulo profundizaremos un poco en esta arquitectura y en c\u00f3mo nos ayuda a afrontar los desaf\u00edos t\u00e9cnicos que surgen d\u00eda tras d\u00eda.<br><br>En nuestro caso hemos optado por una arquitectura modular en la que ciertas partes est\u00e1n separadas y aisladas del resto en todos los niveles, desde el c\u00f3digo hasta el despliegue. Esto conlleva un costo de mantenimiento, pero la principal ventaja es que esas partes tienen un ciclo de vida (idealmente) independiente. Esto les permite crecer a velocidades distintas y con requerimientos distintos.<br><br>Ya que en ODS desarrollamos productos bancarios, tenemos funcionalidades como Cuentas, Pr\u00e9stamos o Tarjetas, entre otras. Adem\u00e1s, desplegamos nuestra soluci\u00f3n en diferentes mercados donde cada uno tiene sus particularidades. La arquitectura modular nos permite separar estas funcionalidades tanto horizontal como verticalmente, mediante bibliotecas de software (libraries):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Horizontalmente<\/strong>, ya que cada funcionalidad es independiente.<\/li>\n\n\n\n<li><strong>Verticalmente<\/strong>, porque esas funcionalidades se pueden extender y sobrescribir.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n hay que tener en cuenta la existencia de unidades globales y locales. Las <strong>unidades globales<\/strong> resuelven el gran porcentaje del problema, mientras que las <strong>unidades locales<\/strong>, si son necesarias, completan esa<strong> \u00faltima milla<\/strong> con las particularidades antes mencionadas.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"1718\" height=\"640\" data-attachment-id=\"2877\" data-permalink=\"https:\/\/blog.joppy.me\/es\/how-to-implement-a-scalable-architecture-across-multiple-platforms\/img1-es\/\" data-orig-file=\"https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/img1-ES.png?fit=1718%2C640&amp;ssl=1\" data-orig-size=\"1718,640\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"img1-ES\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/img1-ES.png?fit=1024%2C381&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/img1-ES.png?resize=1718%2C640&#038;ssl=1\" alt=\"\" class=\"wp-image-2877\" srcset=\"https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/img1-ES.png?w=1718&amp;ssl=1 1718w, https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/img1-ES.png?resize=300%2C112&amp;ssl=1 300w, https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/img1-ES.png?resize=1024%2C381&amp;ssl=1 1024w, https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/img1-ES.png?resize=768%2C286&amp;ssl=1 768w, https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/img1-ES.png?resize=1536%2C572&amp;ssl=1 1536w, https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/img1-ES.png?resize=1200%2C447&amp;ssl=1 1200w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Con esta organizaci\u00f3n hemos logrado estructurar nuestra soluci\u00f3n que actualmente contiene <strong>m\u00e1s de 100 proyectos y\/o repositorios por plataforma<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conceptos a tener en cuenta<\/strong><\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">Clean Architecture<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">El concepto de Clean architecture, propuesto por el ingeniero de software Robert Martin, se basa en un enfoque que permite organizar el c\u00f3digo de tal manera que sea m\u00e1s f\u00e1cil de mantener, escalar y probar sus distintas partes. Este enfoque separa la l\u00f3gica de negocio de los detalles de implementaci\u00f3n, tanto de interfaz de usuario como de capa de datos y dependencias. Aqu\u00ed la capa de datos y la de presentaci\u00f3n dependen de la capa de dominio (l\u00f3gica de negocio), y entre ellas no existe ning\u00fan tipo de relaci\u00f3n.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"1718\" height=\"850\" data-attachment-id=\"2879\" data-permalink=\"https:\/\/blog.joppy.me\/es\/how-to-implement-a-scalable-architecture-across-multiple-platforms\/img2-es\/\" data-orig-file=\"https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/img2-ES.png?fit=1718%2C850&amp;ssl=1\" data-orig-size=\"1718,850\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"img2-ES\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/img2-ES.png?fit=1024%2C507&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/img2-ES.png?resize=1718%2C850&#038;ssl=1\" alt=\"\" class=\"wp-image-2879\" srcset=\"https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/img2-ES.png?w=1718&amp;ssl=1 1718w, https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/img2-ES.png?resize=300%2C148&amp;ssl=1 300w, https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/img2-ES.png?resize=1024%2C507&amp;ssl=1 1024w, https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/img2-ES.png?resize=768%2C380&amp;ssl=1 768w, https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/img2-ES.png?resize=1536%2C760&amp;ssl=1 1536w, https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/img2-ES.png?resize=1200%2C594&amp;ssl=1 1200w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Principios SOLID<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Los cinco principios de dise\u00f1o SOLID buscan mejorar la calidad y mantenibilidad del c\u00f3digo:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>S<\/strong>ingle Responsibility Principle (Principio de Responsabilidad \u00danica): Una clase u entidad debe tener una \u00fanica responsabilidad o motivo para cambiar. Con ello evitamos clases que realizan m\u00faltiples funciones y concentran demasiadas responsabilidades. <\/li>\n\n\n\n<li><strong>O<\/strong>pen-Close Principle (Principio Abierto-Cerrado): La entidad debe estar abierta para la extensi\u00f3n, pero cerrada a modificaci\u00f3n.<\/li>\n\n\n\n<li><strong>L<\/strong>iskov Substitution Principle (Principio de Sustituci\u00f3n de Barbara Liskov): Si una clase B es subclase de una clase A, objetos de la clase A deber\u00edan poder reemplazarse con objetos de la clase B sin que nada falle. Por ejemplo, si tengo una clase \u00abave\u201d con el m\u00e9todo \u201cvolar\u201d, y creo una clase \u201cavestruz\u201d que hereda de \u201cave\u201d, al ejecutar \u201cvolar\u201d deber\u00eda fallar porque estas no vuelan. Ese ejemplo no cumple con este principio, y la jerarqu\u00eda de clases debe reformularse para poder cumplirlo. En cambio, introduciendo una clase \u201cave\u201d de la cual podr\u00eda heredar \u201cavestruz\u201d, y una clase \u201cAveVoladora\u201d que herede de \u201cave\u201d e incorpore el m\u00e9todo \u201cvolar\u201d).<\/li>\n\n\n\n<li><strong>I<\/strong>nterface Segregation Principle (Principio de Segregaci\u00f3n de Interfaces): No deber\u00edan existir interfaces grandes que obliguen a una clase a implementar m\u00e9todos que no utilizan o no pueden implementar. Si hay una interfaz as\u00ed, la debemos separar en otras m\u00e1s espec\u00edficas.<\/li>\n\n\n\n<li><strong>D<\/strong>ependency inversion Principle (Principio de Inversi\u00f3n de Dependencia): Los m\u00f3dulos de alto nivel no deben depender de m\u00f3dulos de bajo nivel y ambos deben dependen de abstracciones. Por ejemplo, una clase no deber\u00eda instanciar un \u201cEMailSender\u201d espec\u00edfico, sino trabajar con una abstracci\u00f3n (interfaz) que permita luego sustituir la implementaci\u00f3n sin modificar a la clase que la utiliza.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Inyecci\u00f3n de dependencias<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">La inyecci\u00f3n de dependencias es un <strong>patr\u00f3n de dise\u00f1o<\/strong> que permite gestionar las dependencias de un objecto. En vez de que un objeto instancie sus dependencias, estas se crean e inyectan desde el exterior. Esto facilita el reemplazo de dependencias y las pruebas unitarias, ya que permite reemplazar implementaciones por mocks que nos ayuden en las distintas pruebas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>La arquitectura de ODS<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Las piezas de software que construimos en nuestra arquitectura se pueden poner y sacar como si fuesen de lego. Esto lo logramos, entre otras cosas, porque definimos protocolos, interfaces e implementaciones por defecto, luego cualquier pieza de software puede extender y\/o sobrescribir esa implementaci\u00f3n. Aqu\u00ed la inyecci\u00f3n de dependencias juega un rol fundamental. Pr\u00e1cticamente todo es inyectable. No s\u00f3lo para poder crear mocks que nos ayuden a testear, sino tambi\u00e9n para permitir la extensi\u00f3n y modificaci\u00f3n del software.<br><br>Esta filosof\u00eda se da en todas las plataformas: API, Android, Web, e incluso en iOS, donde, por ejemplo. no existe un est\u00e1ndar de mercado para la inyecci\u00f3n de dependencias y, por lo tanto, hemos desarrollado uno propio. La arquitectura modular se aplica con el mismo criterio en todas las plataformas, si en iOS tenemos un repositorio de Cuentas espec\u00edfico para Argentina, en el resto de las plataformas tambi\u00e9n.<br><br>Adoptar y mantener un est\u00e1ndar es fundamental para asegurar una arquitectura ordenada y que se pueda comprender f\u00e1cilmente.<br><br>Dentro de cada una de estas piezas, implementamos la Clean architecture. El dominio es la pieza central, tanto la capa de datos como la de presentaci\u00f3n, no solo dependen de \u00e9l, sino que entre ellas se desconocen. El c\u00f3digo est\u00e1 desacoplado, organizado y las responsabilidades de cada pieza est\u00e1n correctamente asignadas. A esta organizaci\u00f3n se le suma un beneficio producto de la modularizaci\u00f3n. En cualquier momento se puede reemplazar la capa de Data, Domain o Presentation por otra implementaci\u00f3n a trav\u00e9s de la inyecci\u00f3n de dependencias, y extender o modificar solo una de ellas sin necesidad de reescribir m\u00e1s all\u00e1 de lo necesario.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Obst\u00e1culos de nuestra arquitectura<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">El primer obst\u00e1culo al implementar esta arquitectura tiene que ver con las <strong>dimensiones<\/strong>. Muchos proyectos, muchos repositorios, muchos componentes. Para el \u00e9xito de esta arquitectura es fundamental contar con un buen nivel de automatizaci\u00f3n. Desde templates o starters que estandaricen la estructura de cada proyecto, hasta la implementaci\u00f3n integraci\u00f3n y despliegue continuo en todas las plataformas.<br><br>El siguiente obst\u00e1culo est\u00e1 relacionado con la <strong>comunicaci\u00f3n<\/strong>. No solo nos interesa que la arquitectura sea id\u00e9ntica (o lo m\u00e1s parecida) entre plataformas, tambi\u00e9n que el c\u00f3digo, al menos la interfaz p\u00fablica, lo sea. Es por esto por lo que los equipos de frontend, sobre todo iOS y Android, deben trabajar sincronizados en cada desarrollo.<br><br>Por \u00faltimo, en algunas plataformas es m\u00e1s f\u00e1cil la <strong>implementaci\u00f3n<\/strong> de este tipo de arquitecturas que en otras. En el mundo backend \/ Android la adopci\u00f3n de estos principios lleva muchos a\u00f1os. En otras como iOS, algunas cosas no tienen la madurez que en otras plataformas. Esto lo hemos suplido con desarrollos propios: un inyector de dependencias, integraci\u00f3n con Maven y Nexus para desplegar artefactos (xcframeworks) y gesti\u00f3n de proyectos con Tuist, entre otros.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusi\u00f3n<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Aunque hemos conseguido alcanzar una mayor madurez en nuestra arquitectura durante el \u00faltimo a\u00f1o, es importante recordar que esta no es r\u00edgida, sino que debe poseer la <strong>flexibilidad<\/strong> necesaria para evolucionar y, m\u00e1s importante, facilitar el desarrollo de productos de calidad.<br><br>Independientemente de lo ambicioso que pueda ser nuestro concepto de arquitectura ideal, debemos tener presente que su prop\u00f3sito es <strong>ser el soporte sobre el que construiremos nuestro producto<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Desarrollar la mayor plataforma bancaria actual, que abarca m\u00e1s de 160 millones de clientes, m\u00e1s de diez mercados y a la que contribuyen equipos de desarrollo de distintas geograf\u00edas es un desaf\u00edo que exige una arquitectura a la altura. Introducci\u00f3n En ODS, a lo largo de los a\u00f1os, hemos aprendido que la correcta implementaci\u00f3n de [&hellip;]<\/p>\n","protected":false},"author":229619567,"featured_media":2894,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_mbp_gutenberg_autopost":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[],"tags":[],"class_list":["post-2874","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>C\u00f3mo implementar una arquitectura escalable en m\u00faltiples plataformas (Openbank) - Tech to be Happy<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.joppy.me\/es\/how-to-implement-a-scalable-architecture-across-multiple-platforms\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\u00f3mo implementar una arquitectura escalable en m\u00faltiples plataformas (Openbank) - Tech to be Happy\" \/>\n<meta property=\"og:description\" content=\"Desarrollar la mayor plataforma bancaria actual, que abarca m\u00e1s de 160 millones de clientes, m\u00e1s de diez mercados y a la que contribuyen equipos de desarrollo de distintas geograf\u00edas es un desaf\u00edo que exige una arquitectura a la altura. Introducci\u00f3n En ODS, a lo largo de los a\u00f1os, hemos aprendido que la correcta implementaci\u00f3n de [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.joppy.me\/es\/how-to-implement-a-scalable-architecture-across-multiple-platforms\/\" \/>\n<meta property=\"og:site_name\" content=\"Tech to be Happy\" \/>\n<meta property=\"article:published_time\" content=\"2024-09-16T14:00:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-16T14:50:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/open1-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1280\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Mundo\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mundo\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.joppy.me\\\/es\\\/how-to-implement-a-scalable-architecture-across-multiple-platforms\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.joppy.me\\\/es\\\/how-to-implement-a-scalable-architecture-across-multiple-platforms\\\/\"},\"author\":{\"name\":\"Mundo\",\"@id\":\"https:\\\/\\\/blog.joppy.me\\\/#\\\/schema\\\/person\\\/9f9460bfbfa01457cc9c5423baaa669c\"},\"headline\":\"C\u00f3mo implementar una arquitectura escalable en m\u00faltiples plataformas (Openbank)\",\"datePublished\":\"2024-09-16T14:00:57+00:00\",\"dateModified\":\"2024-09-16T14:50:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.joppy.me\\\/es\\\/how-to-implement-a-scalable-architecture-across-multiple-platforms\\\/\"},\"wordCount\":1369,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blog.joppy.me\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.joppy.me\\\/es\\\/how-to-implement-a-scalable-architecture-across-multiple-platforms\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blog.joppy.me\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/open1-1.jpg?fit=1920%2C1280&ssl=1\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blog.joppy.me\\\/es\\\/how-to-implement-a-scalable-architecture-across-multiple-platforms\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.joppy.me\\\/es\\\/how-to-implement-a-scalable-architecture-across-multiple-platforms\\\/\",\"url\":\"https:\\\/\\\/blog.joppy.me\\\/es\\\/how-to-implement-a-scalable-architecture-across-multiple-platforms\\\/\",\"name\":\"C\u00f3mo implementar una arquitectura escalable en m\u00faltiples plataformas (Openbank) - Tech to be Happy\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.joppy.me\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.joppy.me\\\/es\\\/how-to-implement-a-scalable-architecture-across-multiple-platforms\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.joppy.me\\\/es\\\/how-to-implement-a-scalable-architecture-across-multiple-platforms\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blog.joppy.me\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/open1-1.jpg?fit=1920%2C1280&ssl=1\",\"datePublished\":\"2024-09-16T14:00:57+00:00\",\"dateModified\":\"2024-09-16T14:50:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.joppy.me\\\/es\\\/how-to-implement-a-scalable-architecture-across-multiple-platforms\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blog.joppy.me\\\/es\\\/how-to-implement-a-scalable-architecture-across-multiple-platforms\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blog.joppy.me\\\/es\\\/how-to-implement-a-scalable-architecture-across-multiple-platforms\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blog.joppy.me\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/open1-1.jpg?fit=1920%2C1280&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blog.joppy.me\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/open1-1.jpg?fit=1920%2C1280&ssl=1\",\"width\":1920,\"height\":1280},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.joppy.me\\\/es\\\/how-to-implement-a-scalable-architecture-across-multiple-platforms\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blog.joppy.me\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C\u00f3mo implementar una arquitectura escalable en m\u00faltiples plataformas (Openbank)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.joppy.me\\\/#website\",\"url\":\"https:\\\/\\\/blog.joppy.me\\\/\",\"name\":\"Tech to be Happy\",\"description\":\"A blog about the tech sector: skills, situation, job tips, recruitment processes... a blog written by devs for devs.\",\"publisher\":{\"@id\":\"https:\\\/\\\/blog.joppy.me\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blog.joppy.me\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/blog.joppy.me\\\/#organization\",\"name\":\"Tech to be Happy\",\"url\":\"https:\\\/\\\/blog.joppy.me\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blog.joppy.me\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blog.joppy.me\\\/wp-content\\\/uploads\\\/2022\\\/11\\\/logo-color-1.png?fit=2160%2C960&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blog.joppy.me\\\/wp-content\\\/uploads\\\/2022\\\/11\\\/logo-color-1.png?fit=2160%2C960&ssl=1\",\"width\":2160,\"height\":960,\"caption\":\"Tech to be Happy\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.joppy.me\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blog.joppy.me\\\/#\\\/schema\\\/person\\\/9f9460bfbfa01457cc9c5423baaa669c\",\"name\":\"Mundo\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7a6868940c96a5b1cd3564548b845223c12a912abe0e6a8271c8f8e5d85106a7?s=96&d=identicon&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7a6868940c96a5b1cd3564548b845223c12a912abe0e6a8271c8f8e5d85106a7?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7a6868940c96a5b1cd3564548b845223c12a912abe0e6a8271c8f8e5d85106a7?s=96&d=identicon&r=g\",\"caption\":\"Mundo\"},\"url\":\"https:\\\/\\\/blog.joppy.me\\\/es\\\/author\\\/mundo8547\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C\u00f3mo implementar una arquitectura escalable en m\u00faltiples plataformas (Openbank) - Tech to be Happy","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.joppy.me\/es\/how-to-implement-a-scalable-architecture-across-multiple-platforms\/","og_locale":"es_ES","og_type":"article","og_title":"C\u00f3mo implementar una arquitectura escalable en m\u00faltiples plataformas (Openbank) - Tech to be Happy","og_description":"Desarrollar la mayor plataforma bancaria actual, que abarca m\u00e1s de 160 millones de clientes, m\u00e1s de diez mercados y a la que contribuyen equipos de desarrollo de distintas geograf\u00edas es un desaf\u00edo que exige una arquitectura a la altura. Introducci\u00f3n En ODS, a lo largo de los a\u00f1os, hemos aprendido que la correcta implementaci\u00f3n de [&hellip;]","og_url":"https:\/\/blog.joppy.me\/es\/how-to-implement-a-scalable-architecture-across-multiple-platforms\/","og_site_name":"Tech to be Happy","article_published_time":"2024-09-16T14:00:57+00:00","article_modified_time":"2024-09-16T14:50:03+00:00","og_image":[{"width":1920,"height":1280,"url":"https:\/\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/open1-1.jpg","type":"image\/jpeg"}],"author":"Mundo","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Mundo","Tiempo de lectura":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.joppy.me\/es\/how-to-implement-a-scalable-architecture-across-multiple-platforms\/#article","isPartOf":{"@id":"https:\/\/blog.joppy.me\/es\/how-to-implement-a-scalable-architecture-across-multiple-platforms\/"},"author":{"name":"Mundo","@id":"https:\/\/blog.joppy.me\/#\/schema\/person\/9f9460bfbfa01457cc9c5423baaa669c"},"headline":"C\u00f3mo implementar una arquitectura escalable en m\u00faltiples plataformas (Openbank)","datePublished":"2024-09-16T14:00:57+00:00","dateModified":"2024-09-16T14:50:03+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.joppy.me\/es\/how-to-implement-a-scalable-architecture-across-multiple-platforms\/"},"wordCount":1369,"commentCount":0,"publisher":{"@id":"https:\/\/blog.joppy.me\/#organization"},"image":{"@id":"https:\/\/blog.joppy.me\/es\/how-to-implement-a-scalable-architecture-across-multiple-platforms\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/open1-1.jpg?fit=1920%2C1280&ssl=1","inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.joppy.me\/es\/how-to-implement-a-scalable-architecture-across-multiple-platforms\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.joppy.me\/es\/how-to-implement-a-scalable-architecture-across-multiple-platforms\/","url":"https:\/\/blog.joppy.me\/es\/how-to-implement-a-scalable-architecture-across-multiple-platforms\/","name":"C\u00f3mo implementar una arquitectura escalable en m\u00faltiples plataformas (Openbank) - Tech to be Happy","isPartOf":{"@id":"https:\/\/blog.joppy.me\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.joppy.me\/es\/how-to-implement-a-scalable-architecture-across-multiple-platforms\/#primaryimage"},"image":{"@id":"https:\/\/blog.joppy.me\/es\/how-to-implement-a-scalable-architecture-across-multiple-platforms\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/open1-1.jpg?fit=1920%2C1280&ssl=1","datePublished":"2024-09-16T14:00:57+00:00","dateModified":"2024-09-16T14:50:03+00:00","breadcrumb":{"@id":"https:\/\/blog.joppy.me\/es\/how-to-implement-a-scalable-architecture-across-multiple-platforms\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.joppy.me\/es\/how-to-implement-a-scalable-architecture-across-multiple-platforms\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blog.joppy.me\/es\/how-to-implement-a-scalable-architecture-across-multiple-platforms\/#primaryimage","url":"https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/open1-1.jpg?fit=1920%2C1280&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/open1-1.jpg?fit=1920%2C1280&ssl=1","width":1920,"height":1280},{"@type":"BreadcrumbList","@id":"https:\/\/blog.joppy.me\/es\/how-to-implement-a-scalable-architecture-across-multiple-platforms\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blog.joppy.me\/"},{"@type":"ListItem","position":2,"name":"C\u00f3mo implementar una arquitectura escalable en m\u00faltiples plataformas (Openbank)"}]},{"@type":"WebSite","@id":"https:\/\/blog.joppy.me\/#website","url":"https:\/\/blog.joppy.me\/","name":"Tech to be Happy","description":"A blog about the tech sector: skills, situation, job tips, recruitment processes... a blog written by devs for devs.","publisher":{"@id":"https:\/\/blog.joppy.me\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.joppy.me\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/blog.joppy.me\/#organization","name":"Tech to be Happy","url":"https:\/\/blog.joppy.me\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blog.joppy.me\/#\/schema\/logo\/image\/","url":"https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2022\/11\/logo-color-1.png?fit=2160%2C960&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2022\/11\/logo-color-1.png?fit=2160%2C960&ssl=1","width":2160,"height":960,"caption":"Tech to be Happy"},"image":{"@id":"https:\/\/blog.joppy.me\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/blog.joppy.me\/#\/schema\/person\/9f9460bfbfa01457cc9c5423baaa669c","name":"Mundo","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/7a6868940c96a5b1cd3564548b845223c12a912abe0e6a8271c8f8e5d85106a7?s=96&d=identicon&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/7a6868940c96a5b1cd3564548b845223c12a912abe0e6a8271c8f8e5d85106a7?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7a6868940c96a5b1cd3564548b845223c12a912abe0e6a8271c8f8e5d85106a7?s=96&d=identicon&r=g","caption":"Mundo"},"url":"https:\/\/blog.joppy.me\/es\/author\/mundo8547\/"}]}},"jetpack_publicize_connections":[],"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/peooVQ-Km","jetpack-related-posts":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blog.joppy.me\/wp-content\/uploads\/2024\/09\/open1-1.jpg?fit=1920%2C1280&ssl=1","_links":{"self":[{"href":"https:\/\/blog.joppy.me\/es\/wp-json\/wp\/v2\/posts\/2874","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.joppy.me\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.joppy.me\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.joppy.me\/es\/wp-json\/wp\/v2\/users\/229619567"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.joppy.me\/es\/wp-json\/wp\/v2\/comments?post=2874"}],"version-history":[{"count":21,"href":"https:\/\/blog.joppy.me\/es\/wp-json\/wp\/v2\/posts\/2874\/revisions"}],"predecessor-version":[{"id":2911,"href":"https:\/\/blog.joppy.me\/es\/wp-json\/wp\/v2\/posts\/2874\/revisions\/2911"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.joppy.me\/es\/wp-json\/wp\/v2\/media\/2894"}],"wp:attachment":[{"href":"https:\/\/blog.joppy.me\/es\/wp-json\/wp\/v2\/media?parent=2874"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.joppy.me\/es\/wp-json\/wp\/v2\/categories?post=2874"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.joppy.me\/es\/wp-json\/wp\/v2\/tags?post=2874"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}