Files
nexus/sreweekly/articles/333/09-when-microservices-are-a-bad-idea.html
2026-09-12 17:23:01 +08:00

1768 lines
182 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="profile" href="https://gmpg.org/xfn/11">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:slnt,wght@-10..0,100..900&family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&display=swap" rel="stylesheet">
<link rel="apple-touch-icon" sizes="180x180" href="https://semaphore.io//apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://semaphore.io//favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="https://semaphore.io//favicon-16x16.png">
<link rel="manifest" href="https://semaphore.io//site.webmanifest">
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-MGJS97C');</script>
<!-- End Google Tag Manager -->
<!-- Global site tag (gtag.js) - Google Analytics -->
<script type="text/plain" data-cookiecategory="analytics" async src="https://www.googletagmanager.com/gtag/js?id=G-YT4RYY5VVM"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-YT4RYY5VVM');
var url = window.location.pathname
const event_name = "visited" + url.replace(/\//ig, '_')
gtag('event', (event_name == "visited_") ? "visited_homepage" : event_name);
</script>
<meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' />
<!-- This site is optimized with the Yoast SEO plugin v28.4 - https://yoast.com/product/yoast-seo-wordpress/ -->
<title>When Microservices Are a Bad Idea</title>
<meta name="description" content="You shouldn&#039;t start a new project with microservices, even if you&#039;re sure your application will be big enough to make it worthwhile." />
<link rel="canonical" href="https://semaphore.io/blog/bad-microservices" />
<meta property="og:locale" content="en_US" />
<meta property="og:type" content="article" />
<meta property="og:title" content="When Microservices Are a Bad Idea" />
<meta property="og:description" content="You shouldn&#039;t start a new project with microservices, even if you&#039;re sure your application will be big enough to make it worthwhile." />
<meta property="og:url" content="https://semaphore.io/blog/bad-microservices" />
<meta property="og:site_name" content="Semaphore" />
<meta property="article:publisher" content="https://www.facebook.com/SemaphoreCI/" />
<meta property="article:published_time" content="2022-07-28T12:19:44+00:00" />
<meta property="article:modified_time" content="2024-10-04T12:11:40+00:00" />
<meta property="og:image" content="https://semaphore.io/wp-content/uploads/2022/07/bad-microservices.jpg" />
<meta property="og:image:width" content="1920" />
<meta property="og:image:height" content="1080" />
<meta property="og:image:type" content="image/jpeg" />
<meta name="author" content="Tomas Fernandez, Dan Ackerson" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:creator" content="@TomFernBlog" />
<meta name="twitter:site" content="@semaphoreci" />
<meta name="twitter:label1" content="Written by" />
<meta name="twitter:data1" content="Tomas Fernandez, Dan Ackerson" />
<meta name="twitter:label2" content="Est. reading time" />
<meta name="twitter:data2" content="8 minutes" />
<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/semaphore.io\/blog\/bad-microservices#article","isPartOf":{"@id":"https:\/\/semaphore.io\/blog\/bad-microservices"},"author":[{"@id":"https:\/\/semaphore.io\/#\/schema\/person\/625439ca43afd5f7ca6e371fdfeb2268"},{"@id":"https:\/\/semaphore.io\/#\/schema\/person\/42ee03465ecdf673dc250385ca02e9b9"}],"headline":"When Microservices Are a Bad Idea","datePublished":"2022-07-28T12:19:44+00:00","dateModified":"2024-10-04T12:11:40+00:00","mainEntityOfPage":{"@id":"https:\/\/semaphore.io\/blog\/bad-microservices"},"wordCount":1752,"commentCount":0,"publisher":{"@id":"https:\/\/semaphore.io\/#organization"},"image":{"@id":"https:\/\/semaphore.io\/blog\/bad-microservices#primaryimage"},"thumbnailUrl":"https:\/\/semaphore.io\/wp-content\/uploads\/2022\/07\/bad-microservices.jpg","articleSection":["Software Engineering"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/semaphore.io\/blog\/bad-microservices","url":"https:\/\/semaphore.io\/blog\/bad-microservices","name":"When Microservices Are a Bad Idea","isPartOf":{"@id":"https:\/\/semaphore.io\/#website"},"primaryImageOfPage":{"@id":"https:\/\/semaphore.io\/blog\/bad-microservices#primaryimage"},"image":{"@id":"https:\/\/semaphore.io\/blog\/bad-microservices#primaryimage"},"thumbnailUrl":"https:\/\/semaphore.io\/wp-content\/uploads\/2022\/07\/bad-microservices.jpg","datePublished":"2022-07-28T12:19:44+00:00","dateModified":"2024-10-04T12:11:40+00:00","description":"You shouldn't start a new project with microservices, even if you're sure your application will be big enough to make it worthwhile.","breadcrumb":{"@id":"https:\/\/semaphore.io\/blog\/bad-microservices#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/semaphore.io\/blog\/bad-microservices"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/semaphore.io\/blog\/bad-microservices#primaryimage","url":"https:\/\/semaphore.io\/wp-content\/uploads\/2022\/07\/bad-microservices.jpg","contentUrl":"https:\/\/semaphore.io\/wp-content\/uploads\/2022\/07\/bad-microservices.jpg","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/semaphore.io\/blog\/bad-microservices#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/semaphore.io\/"},{"@type":"ListItem","position":2,"name":"When Microservices Are a Bad Idea"}]},{"@type":"WebSite","@id":"https:\/\/semaphore.io\/#website","url":"https:\/\/semaphore.io\/","name":"Semaphore","description":"The best CI\/CD tool for high-performance engineering teams.","publisher":{"@id":"https:\/\/semaphore.io\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/semaphore.io\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/semaphore.io\/#organization","name":"Semaphore","url":"https:\/\/semaphore.io\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/semaphore.io\/#\/schema\/logo\/image\/","url":"https:\/\/semaphore.io\/wp-content\/uploads\/2024\/03\/logo-semaphore.svg","contentUrl":"https:\/\/semaphore.io\/wp-content\/uploads\/2024\/03\/logo-semaphore.svg","width":164,"height":23,"caption":"Semaphore"},"image":{"@id":"https:\/\/semaphore.io\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SemaphoreCI\/","https:\/\/x.com\/semaphoreci","https:\/\/www.linkedin.com\/company\/rendered-text\/","https:\/\/www.youtube.com\/c\/SemaphoreCI"]},{"@type":"Person","@id":"https:\/\/semaphore.io\/#\/schema\/person\/625439ca43afd5f7ca6e371fdfeb2268","name":"Tomas Fernandez","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/672629568cc3d0638a51eb21b1d59da40a276c85fd7a33077510fe9fd31c4d29?s=96&d=mm&r=gccb57a3f6960de35091f2cda0e67fdc4","url":"https:\/\/secure.gravatar.com\/avatar\/672629568cc3d0638a51eb21b1d59da40a276c85fd7a33077510fe9fd31c4d29?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/672629568cc3d0638a51eb21b1d59da40a276c85fd7a33077510fe9fd31c4d29?s=96&d=mm&r=g","caption":"Tomas Fernandez"},"description":"I picked up most of my skills during the years I worked at IBM. Was a DBA, developer, and cloud engineer for a time. After that, I went into freelancing, where I found the passion for writing. Now, I'm a full-time writer at Semaphore.","sameAs":["https:\/\/www.linkedin.com\/in\/pablo-tomas-fernandez-b6077514\/","https:\/\/x.com\/TomFernBlog"],"url":"https:\/\/semaphore.io\/blog\/author\/tfernandez"},{"@type":"Person","@id":"https:\/\/semaphore.io\/#\/schema\/person\/42ee03465ecdf673dc250385ca02e9b9","name":"Dan Ackerson","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/432e1657f908a36388b30a1ccbc1045960bdfd796ab92a625a6fd82dc99e1468?s=96&d=mm&r=gb8d5fe1be9c70ef10864f827724424f4","url":"https:\/\/secure.gravatar.com\/avatar\/432e1657f908a36388b30a1ccbc1045960bdfd796ab92a625a6fd82dc99e1468?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/432e1657f908a36388b30a1ccbc1045960bdfd796ab92a625a6fd82dc99e1468?s=96&d=mm&r=g","caption":"Dan Ackerson"},"description":"I picked up most of my soft\/hardware troubleshooting skills in the US Army. A decade of Java development drove me to operations, scaling infrastructure to cope with the thundering herd. Engineering coach and CTO of Teleclinic.","sameAs":["https:\/\/ackerson.de","https:\/\/www.linkedin.com\/in\/danackerson\/","https:\/\/x.com\/danackerson"],"url":"https:\/\/semaphore.io\/blog\/author\/dan-ackerson"}]}</script>
<!-- / Yoast SEO plugin. -->
<link rel="alternate" type="application/rss+xml" title="Semaphore &raquo; Feed" href="https://semaphore.io/feed" />
<link rel="alternate" type="application/rss+xml" title="Semaphore &raquo; Comments Feed" href="https://semaphore.io/comments/feed" />
<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://semaphore.io/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fsemaphore.io%2Fblog%2Fbad-microservices&#038;lang=en" />
<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://semaphore.io/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fsemaphore.io%2Fblog%2Fbad-microservices&#038;format=xml&#038;lang=en" />
<style id="wp-img-auto-sizes-contain-inline-css">
img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
</style>
<style id="wp-emoji-styles-inline-css">
img.wp-smiley, img.emoji {
display: inline !important;
border: none !important;
box-shadow: none !important;
height: 1em !important;
width: 1em !important;
margin: 0 0.07em !important;
vertical-align: -0.1em !important;
background: none !important;
padding: 0 !important;
}
/*# sourceURL=wp-emoji-styles-inline-css */
</style>
<style id="wp-block-library-inline-css">
:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}
/*# sourceURL=/wp-includes/css/dist/block-library/common.min.css */
</style>
<style id="wp-block-heading-inline-css">
h1:where(.wp-block-heading).has-background,h2:where(.wp-block-heading).has-background,h3:where(.wp-block-heading).has-background,h4:where(.wp-block-heading).has-background,h5:where(.wp-block-heading).has-background,h6:where(.wp-block-heading).has-background{padding:1.25em 2.375em}h1.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h1.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h2.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h2.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h3.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h3.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h4.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h4.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h5.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h5.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h6.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h6.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]){rotate:180deg}
/*# sourceURL=https://semaphore.io/wp-includes/blocks/heading/style.min.css */
</style>
<style id="wp-block-image-inline-css">
.wp-block-image>a,.wp-block-image>figure>a{display:inline-block}.wp-block-image img{box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom}@media not (prefers-reduced-motion){.wp-block-image img.hide{visibility:hidden}.wp-block-image img.show{animation:show-content-image .4s}}.wp-block-image[style*=border-radius] img,.wp-block-image[style*=border-radius]>a{border-radius:inherit}.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-image.aligncenter{text-align:center}.wp-block-image.alignfull>a,.wp-block-image.alignwide>a{width:100%}.wp-block-image.alignfull img,.wp-block-image.alignwide img{height:auto;width:100%}.wp-block-image .aligncenter,.wp-block-image .alignleft,.wp-block-image .alignright,.wp-block-image.aligncenter,.wp-block-image.alignleft,.wp-block-image.alignright{display:table}.wp-block-image .aligncenter>figcaption,.wp-block-image .alignleft>figcaption,.wp-block-image .alignright>figcaption,.wp-block-image.aligncenter>figcaption,.wp-block-image.alignleft>figcaption,.wp-block-image.alignright>figcaption{caption-side:bottom;display:table-caption}.wp-block-image .alignleft{float:left;margin:.5em 1em .5em 0}.wp-block-image .alignright{float:right;margin:.5em 0 .5em 1em}.wp-block-image .aligncenter{margin-left:auto;margin-right:auto}.wp-block-image :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-image.is-style-circle-mask img{border-radius:9999px}@supports ((-webkit-mask-image:none) or (mask-image:none)) or (-webkit-mask-image:none){.wp-block-image.is-style-circle-mask img{border-radius:0;-webkit-mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-mode:alpha;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}}:root :where(.wp-block-image.is-style-rounded img,.wp-block-image .is-style-rounded img){border-radius:9999px}.wp-block-image figure{margin:0}.wp-lightbox-container{display:flex;flex-direction:column;position:relative}.wp-lightbox-container img{cursor:zoom-in}.wp-lightbox-container img:hover+button{opacity:1}.wp-lightbox-container button{align-items:center;backdrop-filter:blur(16px) saturate(180%);background-color:rgba(90,90,90,.25);border:none;border-radius:4px;cursor:zoom-in;display:flex;height:20px;justify-content:center;opacity:0;padding:0;position:absolute;right:16px;text-align:center;top:16px;width:20px;z-index:100}@media not (prefers-reduced-motion){.wp-lightbox-container button{transition:opacity .2s ease}}.wp-lightbox-container button:focus-visible{outline:3px auto rgba(90,90,90,.25);outline:3px auto -webkit-focus-ring-color;outline-offset:3px}.wp-lightbox-container button:hover{cursor:pointer;opacity:1}.wp-lightbox-container button:focus{opacity:1}.wp-lightbox-container button:focus,.wp-lightbox-container button:hover,.wp-lightbox-container button:not(:hover):not(:active):not(.has-background){background-color:rgba(90,90,90,.25);border:none}.wp-lightbox-overlay{box-sizing:border-box;cursor:zoom-out;height:100vh;left:0;overflow:hidden;position:fixed;top:0;visibility:hidden;width:100%;z-index:100000}.wp-lightbox-overlay .wp-lightbox-close-button{align-items:center;cursor:pointer;display:flex;font-family:inherit;gap:8px;justify-content:center;line-height:1;min-height:40px;min-width:40px;padding:0 4px;position:absolute;right:calc(env(safe-area-inset-right) + 16px);top:calc(env(safe-area-inset-top) + 16px);z-index:5000000}.wp-lightbox-overlay .wp-lightbox-close-button:focus,.wp-lightbox-overlay .wp-lightbox-close-button:hover,.wp-lightbox-overlay .wp-lightbox-close-button:not(:hover):not(:active):not(.has-background){background:none;border:none}.wp-lightbox-overlay .wp-lightbox-close-button:has(.wp-lightbox-close-text:not([hidden])) .wp-lightbox-close-icon svg{height:1em;width:1em}.wp-lightbox-overlay .wp-lightbox-close-icon svg{display:block}.wp-lightbox-overlay .wp-lightbox-navigation-button-next,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev{align-items:center;bottom:16px;cursor:pointer;display:flex;font-family:inherit;gap:4px;justify-content:center;line-height:1;min-height:40px;min-width:40px;padding:0 8px;position:absolute;z-index:2000002}.wp-lightbox-overlay .wp-lightbox-navigation-button-next[hidden],.wp-lightbox-overlay .wp-lightbox-navigation-button-prev[hidden]{display:none}@media (min-width:960px){.wp-lightbox-overlay .wp-lightbox-navigation-button-next,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev{bottom:50%;transform:translateY(-50%)}}.wp-lightbox-overlay .wp-lightbox-navigation-button-next:focus,.wp-lightbox-overlay .wp-lightbox-navigation-button-next:hover,.wp-lightbox-overlay .wp-lightbox-navigation-button-next:not(:hover):not(:active):not(.has-background),.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:focus,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:hover,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:not(:hover):not(:active):not(.has-background){background:none;border:none;padding:0 8px}.wp-lightbox-overlay .wp-lightbox-navigation-button-next:has(.wp-lightbox-navigation-text:not([hidden])) .wp-lightbox-navigation-icon svg,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:has(.wp-lightbox-navigation-text:not([hidden])) .wp-lightbox-navigation-icon svg{display:block;height:1.5em;width:1.5em}.wp-lightbox-overlay .wp-lightbox-navigation-button-prev{left:calc(env(safe-area-inset-left) + 16px)}.wp-lightbox-overlay .wp-lightbox-navigation-button-next{right:calc(env(safe-area-inset-right) + 16px)}.wp-lightbox-overlay .wp-lightbox-navigation-icon svg{vertical-align:middle}.wp-lightbox-overlay .lightbox-image-container{height:var(--wp--lightbox-container-height);left:50%;overflow:hidden;position:absolute;top:50%;transform:translate(-50%,-50%);transform-origin:top left;width:var(--wp--lightbox-container-width);z-index:2000001}.wp-lightbox-overlay .wp-block-image{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:center;margin:0;position:relative;transform-origin:0 0;width:100%;z-index:3000000}.wp-lightbox-overlay .wp-block-image img{height:var(--wp--lightbox-image-height);min-height:var(--wp--lightbox-image-height);min-width:var(--wp--lightbox-image-width);width:var(--wp--lightbox-image-width)}.wp-lightbox-overlay .wp-block-image figcaption{display:none}.wp-lightbox-overlay button{background:none;border:none}.wp-lightbox-overlay .scrim{background-color:#fff;height:100%;opacity:.9;position:absolute;width:100%;z-index:2000000}.wp-lightbox-overlay.active{visibility:visible}@media not (prefers-reduced-motion){.wp-lightbox-overlay.active{animation:turn-on-visibility .25s both}.wp-lightbox-overlay.active img{animation:turn-on-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active){animation:turn-off-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active) img{animation:turn-off-visibility .25s both}.wp-lightbox-overlay.zoom.active{animation:none;opacity:1;visibility:visible}.wp-lightbox-overlay.zoom.active .lightbox-image-container{animation:lightbox-zoom-in .4s}.wp-lightbox-overlay.zoom.active .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.active .scrim{animation:turn-on-visibility .4s forwards}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active){animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container{animation:lightbox-zoom-out .4s}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .scrim{animation:turn-off-visibility .4s forwards}}@keyframes show-content-image{0%{visibility:hidden}99%{visibility:hidden}to{visibility:visible}}@keyframes turn-on-visibility{0%{opacity:0}to{opacity:1}}@keyframes turn-off-visibility{0%{opacity:1;visibility:visible}99%{opacity:0;visibility:visible}to{opacity:0;visibility:hidden}}@keyframes lightbox-zoom-in{0%{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale))}to{transform:translate(-50%,-50%) scale(1)}}@keyframes lightbox-zoom-out{0%{transform:translate(-50%,-50%) scale(1);visibility:visible}99%{visibility:visible}to{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));visibility:hidden}}
/*# sourceURL=https://semaphore.io/wp-includes/blocks/image/style.min.css */
</style>
<style id="wp-block-list-inline-css">
ol,ul{box-sizing:border-box}:root :where(.wp-block-list.has-background){padding:1.25em 2.375em}
/*# sourceURL=https://semaphore.io/wp-includes/blocks/list/style.min.css */
</style>
<style id="wp-block-paragraph-inline-css">
.is-small-text{font-size:.875em}.is-regular-text{font-size:1em}.is-large-text{font-size:2.25em}.is-larger-text{font-size:3em}.has-drop-cap:not(:focus):first-letter{float:left;font-size:8.4em;font-style:normal;font-weight:100;line-height:.68;margin:.05em .1em 0 0;text-transform:uppercase}body.rtl .has-drop-cap:not(:focus):first-letter{float:none;margin-left:.1em}p.has-drop-cap.has-background{overflow:hidden}:root :where(p.has-background){padding:1.25em 2.375em}:where(p.has-text-color:not(.has-link-color)) a{color:inherit}p.has-text-align-left[style*="writing-mode:vertical-lr"],p.has-text-align-right[style*="writing-mode:vertical-rl"]{rotate:180deg}
/*# sourceURL=https://semaphore.io/wp-includes/blocks/paragraph/style.min.css */
</style>
<style id="wp-block-columns-inline-css">
.wp-block-columns{box-sizing:border-box;display:flex;flex-wrap:wrap!important}@media (min-width:782px){.wp-block-columns{flex-wrap:nowrap!important}}.wp-block-columns{align-items:normal!important}.wp-block-columns.are-vertically-aligned-top{align-items:flex-start}.wp-block-columns.are-vertically-aligned-center{align-items:center}.wp-block-columns.are-vertically-aligned-bottom{align-items:flex-end}@media (max-width:781px){.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{flex-basis:100%!important}}@media (min-width:782px){.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{flex-basis:0;flex-grow:1}.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column[style*=flex-basis]{flex-grow:0}}.wp-block-columns.is-not-stacked-on-mobile{flex-wrap:nowrap!important}.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column{flex-basis:0;flex-grow:1}.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column[style*=flex-basis]{flex-grow:0}:where(.wp-block-columns){margin-bottom:1.75em}:where(.wp-block-columns.has-background){padding:1.25em 2.375em}.wp-block-column{flex-grow:1;min-width:0;overflow-wrap:break-word;word-break:break-word}.wp-block-column.is-vertically-aligned-top{align-self:flex-start}.wp-block-column.is-vertically-aligned-center{align-self:center}.wp-block-column.is-vertically-aligned-bottom{align-self:flex-end}.wp-block-column.is-vertically-aligned-stretch{align-self:stretch}.wp-block-column.is-vertically-aligned-bottom,.wp-block-column.is-vertically-aligned-center,.wp-block-column.is-vertically-aligned-top{width:100%}
/*# sourceURL=https://semaphore.io/wp-includes/blocks/columns/style.min.css */
</style>
<style id="wp-block-embed-inline-css">
.wp-block-embed.alignleft,.wp-block-embed.alignright,.wp-block[data-align=left]>[data-type="core/embed"],.wp-block[data-align=right]>[data-type="core/embed"]{max-width:360px;width:100%}.wp-block-embed.alignleft .wp-block-embed__wrapper,.wp-block-embed.alignright .wp-block-embed__wrapper,.wp-block[data-align=left]>[data-type="core/embed"] .wp-block-embed__wrapper,.wp-block[data-align=right]>[data-type="core/embed"] .wp-block-embed__wrapper{min-width:280px}.wp-block-cover .wp-block-embed{min-height:240px;min-width:320px}.wp-block-group.is-layout-flex .wp-block-embed{flex:1 1 0%;min-width:0}.wp-block-embed{overflow-wrap:break-word}.wp-block-embed :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-embed iframe{max-width:100%}.wp-block-embed__wrapper{position:relative}.wp-embed-responsive .wp-has-aspect-ratio .wp-block-embed__wrapper:before{content:"";display:block;padding-top:50%}.wp-embed-responsive .wp-has-aspect-ratio iframe{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}.wp-embed-responsive .wp-embed-aspect-21-9 .wp-block-embed__wrapper:before{padding-top:42.85%}.wp-embed-responsive .wp-embed-aspect-18-9 .wp-block-embed__wrapper:before{padding-top:50%}.wp-embed-responsive .wp-embed-aspect-16-9 .wp-block-embed__wrapper:before{padding-top:56.25%}.wp-embed-responsive .wp-embed-aspect-4-3 .wp-block-embed__wrapper:before{padding-top:75%}.wp-embed-responsive .wp-embed-aspect-1-1 .wp-block-embed__wrapper:before{padding-top:100%}.wp-embed-responsive .wp-embed-aspect-9-16 .wp-block-embed__wrapper:before{padding-top:177.77%}.wp-embed-responsive .wp-embed-aspect-1-2 .wp-block-embed__wrapper:before{padding-top:200%}
/*# sourceURL=https://semaphore.io/wp-includes/blocks/embed/style.min.css */
</style>
<style id="wp-block-group-inline-css">
.wp-block-group{box-sizing:border-box}:where(.wp-block-group.wp-block-group-is-layout-constrained){position:relative}
/*# sourceURL=https://semaphore.io/wp-includes/blocks/group/style.min.css */
</style>
<style id="wp-block-quote-inline-css">
.wp-block-quote{box-sizing:border-box;overflow-wrap:break-word}.wp-block-quote.is-large:where(:not(.is-style-plain)),.wp-block-quote.is-style-large:where(:not(.is-style-plain)){margin-bottom:1em;padding:0 1em}.wp-block-quote.is-large:where(:not(.is-style-plain)) p,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) p{font-size:1.5em;font-style:italic;line-height:1.6}.wp-block-quote.is-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-large:where(:not(.is-style-plain)) footer,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) footer{font-size:1.125em;text-align:right}.wp-block-quote>cite{display:block}
/*# sourceURL=https://semaphore.io/wp-includes/blocks/quote/style.min.css */
</style>
<style id="wp-block-spacer-inline-css">
.wp-block-spacer{clear:both}
/*# sourceURL=https://semaphore.io/wp-includes/blocks/spacer/style.min.css */
</style>
<style id="global-styles-inline-css">
:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--v-8-white: #FFFFFF;--wp--preset--color--v-8-black: #0D1421;--wp--preset--color--v-8-gray: #677278;--wp--preset--color--v-8-green: #00A569;--wp--preset--color--v-8-yellow: #FFD517;--wp--preset--color--v-8-purple: #A74DC3;--wp--preset--color--v-8-light-yellow: #F7F3EC;--wp--preset--color--v-8-blue: #538BFA;--wp--preset--color--v-8-light-gray: #F6F8F9;--wp--preset--color--v-8-stroke: #D2D4D6;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--font-size--font-down-4: var(--font-down-4);--wp--preset--font-size--font-down-3: var(--font-down-3);--wp--preset--font-size--font-down-2: var(--font-down-2);--wp--preset--font-size--font-down-1: var(--font-down-1);--wp--preset--font-size--font-root: var(--font-root);--wp--preset--font-size--font-up-2: var(--font-up-2);--wp--preset--font-size--font-up-4: var(--font-up-4);--wp--preset--font-size--font-up-6: var(--font-up-6);--wp--preset--font-size--font-up-9: var(--font-up-9);--wp--preset--font-size--font-up-11: var(--font-up-11);--wp--preset--font-size--font-up-13: var(--font-up-13);--wp--preset--font-size--font-up-15: var(--font-up-15);--wp--preset--font-family--inter: 'Inter', sans-serif;--wp--preset--font-family--jetbrains: 'JetBrains Mono', monospace;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:root { --wp--style--global--content-size: 1580px;--wp--style--global--wide-size: 1920px; }:where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.wp-site-blocks) > * { margin-block-start: 24px; margin-block-end: 0; }:where(.wp-site-blocks) > :first-child { margin-block-start: 0; }:where(.wp-site-blocks) > :last-child { margin-block-end: 0; }:root { --wp--style--block-gap: 24px; }:root :where(.is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.is-layout-flow) > *{margin-block-start: 24px;margin-block-end: 0;}:root :where(.is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.is-layout-constrained) > *{margin-block-start: 24px;margin-block-end: 0;}:root :where(.is-layout-flex){gap: 24px;}:root :where(.is-layout-grid){gap: 24px;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-v-8-white-color{color: var(--wp--preset--color--v-8-white) !important;}.has-v-8-black-color{color: var(--wp--preset--color--v-8-black) !important;}.has-v-8-gray-color{color: var(--wp--preset--color--v-8-gray) !important;}.has-v-8-green-color{color: var(--wp--preset--color--v-8-green) !important;}.has-v-8-yellow-color{color: var(--wp--preset--color--v-8-yellow) !important;}.has-v-8-purple-color{color: var(--wp--preset--color--v-8-purple) !important;}.has-v-8-light-yellow-color{color: var(--wp--preset--color--v-8-light-yellow) !important;}.has-v-8-blue-color{color: var(--wp--preset--color--v-8-blue) !important;}.has-v-8-light-gray-color{color: var(--wp--preset--color--v-8-light-gray) !important;}.has-v-8-stroke-color{color: var(--wp--preset--color--v-8-stroke) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-v-8-white-background-color{background-color: var(--wp--preset--color--v-8-white) !important;}.has-v-8-black-background-color{background-color: var(--wp--preset--color--v-8-black) !important;}.has-v-8-gray-background-color{background-color: var(--wp--preset--color--v-8-gray) !important;}.has-v-8-green-background-color{background-color: var(--wp--preset--color--v-8-green) !important;}.has-v-8-yellow-background-color{background-color: var(--wp--preset--color--v-8-yellow) !important;}.has-v-8-purple-background-color{background-color: var(--wp--preset--color--v-8-purple) !important;}.has-v-8-light-yellow-background-color{background-color: var(--wp--preset--color--v-8-light-yellow) !important;}.has-v-8-blue-background-color{background-color: var(--wp--preset--color--v-8-blue) !important;}.has-v-8-light-gray-background-color{background-color: var(--wp--preset--color--v-8-light-gray) !important;}.has-v-8-stroke-background-color{background-color: var(--wp--preset--color--v-8-stroke) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-v-8-white-border-color{border-color: var(--wp--preset--color--v-8-white) !important;}.has-v-8-black-border-color{border-color: var(--wp--preset--color--v-8-black) !important;}.has-v-8-gray-border-color{border-color: var(--wp--preset--color--v-8-gray) !important;}.has-v-8-green-border-color{border-color: var(--wp--preset--color--v-8-green) !important;}.has-v-8-yellow-border-color{border-color: var(--wp--preset--color--v-8-yellow) !important;}.has-v-8-purple-border-color{border-color: var(--wp--preset--color--v-8-purple) !important;}.has-v-8-light-yellow-border-color{border-color: var(--wp--preset--color--v-8-light-yellow) !important;}.has-v-8-blue-border-color{border-color: var(--wp--preset--color--v-8-blue) !important;}.has-v-8-light-gray-border-color{border-color: var(--wp--preset--color--v-8-light-gray) !important;}.has-v-8-stroke-border-color{border-color: var(--wp--preset--color--v-8-stroke) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-font-down-4-font-size{font-size: var(--wp--preset--font-size--font-down-4) !important;}.has-font-down-3-font-size{font-size: var(--wp--preset--font-size--font-down-3) !important;}.has-font-down-2-font-size{font-size: var(--wp--preset--font-size--font-down-2) !important;}.has-font-down-1-font-size{font-size: var(--wp--preset--font-size--font-down-1) !important;}.has-font-root-font-size{font-size: var(--wp--preset--font-size--font-root) !important;}.has-font-up-2-font-size{font-size: var(--wp--preset--font-size--font-up-2) !important;}.has-font-up-4-font-size{font-size: var(--wp--preset--font-size--font-up-4) !important;}.has-font-up-6-font-size{font-size: var(--wp--preset--font-size--font-up-6) !important;}.has-font-up-9-font-size{font-size: var(--wp--preset--font-size--font-up-9) !important;}.has-font-up-11-font-size{font-size: var(--wp--preset--font-size--font-up-11) !important;}.has-font-up-13-font-size{font-size: var(--wp--preset--font-size--font-up-13) !important;}.has-font-up-15-font-size{font-size: var(--wp--preset--font-size--font-up-15) !important;}.has-inter-font-family{font-family: var(--wp--preset--font-family--inter) !important;}.has-jetbrains-font-family{font-family: var(--wp--preset--font-family--jetbrains) !important;}
/*# sourceURL=global-styles-inline-css */
</style>
<link rel='stylesheet' id='cf7apps-honeypot-frontend-css' href='https://semaphore.io/wp-content/plugins/contact-form-7-honeypot/legacy-honeypot/includes/css/honeypot-frontend.css?ver=3.7.1' media='all' />
<link rel='stylesheet' id='contact-form-7-css' href='https://semaphore.io/wp-content/plugins/contact-form-7/includes/css/styles.css?ver=6.1.7' media='all' />
<link rel='stylesheet' id='wpcf7-redirect-script-frontend-css' href='https://semaphore.io/wp-content/plugins/wpcf7-redirect/build/assets/frontend-script.css?ver=2c532d7e2be36f6af233' media='all' />
<link rel='stylesheet' id='youtube-playlist-embed-css-css' href='https://semaphore.io/wp-content/plugins/youtube-playlist-embed/assets/playlist.css?ver=7.1' media='all' />
<link rel='stylesheet' id='youtube-playlist-embed-block-style-css' href='https://semaphore.io/wp-content/plugins/youtube-playlist-embed/blocks/youtube-playlist/style.css?ver=1748428158' media='all' />
<link rel='stylesheet' id='semaphoreci_v8-style-css' href='https://semaphore.io/wp-content/themes/semaphoreci_v8/style.css?ver=1785062828' media='all' />
<link rel='stylesheet' id='semaphoreci-single-blog-layout-css' href='https://semaphore.io/wp-content/themes/semaphoreci_v8/css/single-blog-layout.css?ver=1785062830' media='all' />
<link rel='stylesheet' id='tablepress-default-css' href='https://semaphore.io/wp-content/tablepress-combined.min.css?ver=37' media='all' />
<script id="bodhi_svg_inline-js-extra">
var svgSettings = {"skipNested":""};
//# sourceURL=bodhi_svg_inline-js-extra
</script>
<script id="bodhi_svg_inline-js" src="https://semaphore.io/wp-content/plugins/svg-support/js/min/svgs-inline-vanilla-min.js?ver=2.6.1"></script>
<script id="bodhi_svg_inline-js-after">
cssTarget={"Bodhi":"img.style-svg","ForceInlineSVG":"style-svg"};ForceInlineSVGActive="false";frontSanitizationEnabled=false;
//# sourceURL=bodhi_svg_inline-js-after
</script>
<script id="jquery-core-js" src="https://semaphore.io/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"></script>
<script id="jquery-migrate-js" src="https://semaphore.io/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1"></script>
<link rel="https://api.w.org/" href="https://semaphore.io/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://semaphore.io/wp-json/wp/v2/posts/19483" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://semaphore.io/xmlrpc.php?rsd" />
<meta name="generator" content="WordPress 7.1" />
<link rel='shortlink' href='https://semaphore.io/?p=19483' />
<link rel="icon" href="https://semaphore.io/wp-content/uploads/2022/07/cropped-semaphore_logo2-32x32.png" sizes="32x32" />
<link rel="icon" href="https://semaphore.io/wp-content/uploads/2022/07/cropped-semaphore_logo2-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://semaphore.io/wp-content/uploads/2022/07/cropped-semaphore_logo2-180x180.png" />
<meta name="msapplication-TileImage" content="https://semaphore.io/wp-content/uploads/2022/07/cropped-semaphore_logo2-270x270.png" />
<style id="core-block-supports-inline-css">
.wp-elements-1 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-black);}.wp-container-core-group-is-layout-ae589722 > .alignfull{margin-right:calc(10px * -1);margin-left:calc(10px * -1);}.wp-elements-2 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-black);}.wp-elements-3 a:where(:not(.wp-element-button)){color:#2865de;}.wp-container-core-group-is-layout-1364a37d > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width:200px;margin-left:0 !important;margin-right:auto !important;}.wp-container-core-group-is-layout-1364a37d > .alignwide{max-width:200px;}.wp-container-core-group-is-layout-1364a37d .alignfull{max-width:none;}.wp-container-core-group-is-layout-48a2a079 > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width:214px;margin-left:0 !important;margin-right:auto !important;}.wp-container-core-group-is-layout-48a2a079 > .alignwide{max-width:214px;}.wp-container-core-group-is-layout-48a2a079 .alignfull{max-width:none;}.wp-container-core-group-is-layout-48a2a079 > .alignfull{margin-right:calc(1rem * -1);margin-left:calc(1rem * -1);}.wp-elements-4 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-black);}.wp-elements-5 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-black);}.wp-elements-6 a:where(:not(.wp-element-button)){color:#2865de;}.wp-elements-7 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-black);}.wp-container-core-group-is-layout-17c462e1 > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width:200px;margin-left:0 !important;margin-right:auto !important;}.wp-container-core-group-is-layout-17c462e1 > .alignwide{max-width:200px;}.wp-container-core-group-is-layout-17c462e1 .alignfull{max-width:none;}.wp-elements-8 a:where(:not(.wp-element-button)){color:#2865de;}.wp-container-core-group-is-layout-c4f0a831 > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width:212px;margin-left:0 !important;margin-right:auto !important;}.wp-container-core-group-is-layout-c4f0a831 > .alignwide{max-width:212px;}.wp-container-core-group-is-layout-c4f0a831 .alignfull{max-width:none;}.wp-container-core-group-is-layout-f65fd461 > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width:100%;margin-left:0 !important;margin-right:auto !important;}.wp-container-core-group-is-layout-f65fd461 > .alignwide{max-width:100%;}.wp-container-core-group-is-layout-f65fd461 .alignfull{max-width:none;}.wp-container-core-group-is-layout-f65fd461 > .alignfull{margin-right:calc(1.5rem * -1);margin-left:calc(1.5rem * -1);}.wp-elements-9 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-black);}.wp-elements-10 a:where(:not(.wp-element-button)){color:#2865de;}.wp-container-core-group-is-layout-4ce229e9 > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width:74px;margin-left:auto !important;margin-right:0 !important;}.wp-container-core-group-is-layout-4ce229e9 > .alignwide{max-width:74px;}.wp-container-core-group-is-layout-4ce229e9 .alignfull{max-width:none;}.wp-container-core-group-is-layout-8b0d4003 > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width:100%;margin-left:0 !important;margin-right:auto !important;}.wp-container-core-group-is-layout-8b0d4003 > .alignwide{max-width:100%;}.wp-container-core-group-is-layout-8b0d4003 .alignfull{max-width:none;}.wp-container-core-group-is-layout-8b0d4003 > .alignfull{margin-right:calc(var(--wp--preset--spacing--50) * -1);margin-left:calc(var(--wp--preset--spacing--50) * -1);}.wp-container-core-group-is-layout-fd8b4a01 > .alignfull{margin-right:calc(0px * -1);margin-left:calc(0px * -1);}.wp-container-core-group-is-layout-76d41a2c{flex-wrap:nowrap;gap:0.5rem;flex-direction:column;align-items:flex-start;}.wp-elements-11 a:where(:not(.wp-element-button)){color:#ffffff9e;}.wp-elements-12 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-white);}.wp-container-core-columns-is-layout-e6f5fef2{flex-wrap:nowrap;}.wp-container-core-group-is-layout-f8bdc706 > .alignfull{margin-right:calc(8% * -1);margin-left:calc(8% * -1);}.wp-container-core-group-is-layout-e74abb89 > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width:1580px;margin-left:auto !important;margin-right:auto !important;}.wp-container-core-group-is-layout-e74abb89 > .alignwide{max-width:1580px;}.wp-container-core-group-is-layout-e74abb89 .alignfull{max-width:none;}.wp-elements-13 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-white);}.wp-elements-14 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-white);}.wp-elements-14 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-container-core-group-is-layout-c1b47ee0{flex-wrap:nowrap;gap:8%;}.wp-container-core-column-is-layout-f6ee7863 > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width:280px;margin-left:0 !important;margin-right:auto !important;}.wp-container-core-column-is-layout-f6ee7863 > .alignwide{max-width:280px;}.wp-container-core-column-is-layout-f6ee7863 .alignfull{max-width:none;}.wp-elements-15 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-white);}.wp-elements-16 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-16 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-17 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-17 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-18 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-18 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-19 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-19 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-20 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-20 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-21 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-21 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-22 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-white);}.wp-elements-23 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-23 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-24 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-24 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-25 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-25 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-26 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-26 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-27 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-27 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-28 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-28 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-29 a:where(:not(.wp-element-button)){color:#838b9c;}.wp-elements-29 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-container-core-group-is-layout-12181dce{flex-wrap:nowrap;gap:0.5rem;justify-content:flex-end;align-items:flex-start;}.wp-container-core-columns-is-layout-7387b849{flex-wrap:nowrap;}.wp-elements-30 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-white);}.wp-elements-31 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-white);}.wp-elements-31 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-32 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-white);}.wp-elements-33 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-33 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-34 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-34 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-35 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-35 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-36 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-36 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-37 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-37 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-38 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-38 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-39 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-white);}.wp-elements-40 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-40 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-41 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-41 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-42 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-42 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-43 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-43 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-44 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-44 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-45 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-45 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-46 a:where(:not(.wp-element-button)){color:#838b9c;}.wp-elements-47 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-white);}.wp-elements-48 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-white);}.wp-elements-48 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-49 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-white);}.wp-elements-50 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-50 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-51 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-51 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-52 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-52 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-53 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-53 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-54 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-54 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-55 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-55 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-56 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-white);}.wp-elements-57 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-57 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-58 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-58 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-59 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-59 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-60 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-60 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-61 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-61 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-62 a:where(:not(.wp-element-button)){color:#98a2b5;}.wp-elements-62 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-63 a:where(:not(.wp-element-button)){color:#838b9c;}.wp-elements-64 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-gray);}.wp-elements-64 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-65 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-gray);}.wp-elements-65 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-66 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-gray);}.wp-container-core-group-is-layout-ce4d7537{gap:10px;}.wp-container-core-group-is-layout-bc62f25f{gap:10px;justify-content:space-between;}.wp-elements-67 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-gray);}.wp-elements-67 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-68 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-gray);}.wp-elements-68 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-69 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-gray);}.wp-container-core-group-is-layout-f36ac205{flex-wrap:nowrap;justify-content:space-between;}.wp-elements-70 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-gray);}.wp-elements-70 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-71 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-gray);}.wp-elements-71 a:where(:not(.wp-element-button)):hover{color:var(--wp--preset--color--v-8-white);}.wp-elements-72 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--v-8-gray);}
/*# sourceURL=core-block-supports-inline-css */
</style>
</head>
<body class="wp-singular post-template-default single single-post postid-19483 single-format-standard wp-embed-responsive wp-theme-semaphoreci_v8 no-sidebar">
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MGJS97C"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<div id="page" class="site blog-page ">
<header id="masthead" class="site-header transparent blog-header ">
<div class="wrap">
<!-- header for website -->
<div class="site-branding">
<p class="site-title"><a href="https://semaphore.io/" rel="home">Semaphore</a></p>
</div><!-- .site-branding -->
<nav id="site-navigation" class="top-navigation">
<div class="top-menu-semaphore"><ul id="primary-menu" class="menu"><li id="menu-item-25828" class="side menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-25828"><a href="#">Product</a>
<div class='sub-menu-wrap'>
<ul class='sub-menu'>
<li id="menu-item-23207" class="title menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-23207"><a href="#">Features</a>
<ul class='sub-menu'>
<li id="menu-item-23208" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23208"><a href="https://semaphore.io/product/continuous-integration-and-pipelines">Continuous Integration &#038; Pipelines</a></li>
<li id="menu-item-23209" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23209"><a href="https://semaphore.io/product/deployments-and-automation">Deployments &#038; Automation</a></li>
<li id="menu-item-27232" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-27232"><a href="https://docs.semaphore.io/using-semaphore/ai/mcp-server">MCP Server 🆕</a></li>
<li id="menu-item-23210" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23210"><a href="https://semaphore.io/product/metrics-and-observability">Metrics &#038; Observability</a></li>
<li id="menu-item-23211" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23211"><a href="https://semaphore.io/product/security-and-compliance">Security &#038; Compliance</a></li>
<li id="menu-item-23212" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23212"><a href="https://semaphore.io/product/developer-toolkit">Developer Toolkit</a></li>
<li id="menu-item-24172" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-24172"><a href="https://semaphore.io/product/test-reports">Test reports</a></li>
<li id="menu-item-24174" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-24174"><a href="https://semaphore.io/product/monorepos">Monorepos</a></li>
<li id="menu-item-24175" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-24175"><a href="https://semaphore.io/product/self-hosted-agents">Self-hosted agents</a></li>
</ul>
</li>
<li id="menu-item-26804" class="empty menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-26804"><a href="#">Menu Item</a>
<ul class='sub-menu'>
<li id="menu-item-26133" class="title menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-26133"><a href="#">Deployment options</a>
<ul class='sub-menu'>
<li id="menu-item-26135" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-26135"><a href="https://semaphore.io/open-source">Open source</a></li>
<li id="menu-item-26344" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-26344"><a href="https://semaphore.io/cloud">Cloud</a></li>
<li id="menu-item-26134" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-26134"><a href="https://semaphore.io/hybrid">Hybrid</a></li>
<li id="menu-item-26745" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-26745"><a href="https://semaphore.io/enterprise">Enterprise</a></li>
</ul>
</li>
<li id="menu-item-26375" class="title second menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-26375"><a href="#">Explore</a>
<ul class='sub-menu'>
<li id="menu-item-26376" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-26376"><a href="https://semaphore.io/customers">Customers</a></li>
<li id="menu-item-26379" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-26379"><a href="https://semaphore.io/security">Security</a></li>
</ul>
</li>
</ul>
</li>
<li class='menu-widget'><div id="block-47" class="submenu-widget product-widget">
<div class="wp-block-group is-style-full-height is-style-columnspacebetween has-background is-content-justification-left is-layout-constrained wp-container-core-group-is-layout-48a2a079 wp-block-group-is-layout-constrained" style="border-radius:20px;background:linear-gradient(182deg,rgb(215,227,252) 27%,rgb(255,242,183) 100%);padding-top:var(--wp--preset--spacing--40);padding-right:1rem;padding-bottom:var(--wp--preset--spacing--40);padding-left:1rem">
<div class="wp-block-group is-content-justification-left is-layout-constrained wp-container-core-group-is-layout-1364a37d wp-block-group-is-layout-constrained">
<div class="wp-block-group is-style-displayinline has-v-8-yellow-background-color has-background is-layout-constrained wp-container-core-group-is-layout-ae589722 wp-block-group-is-layout-constrained" style="border-radius:50px;padding-top:1px;padding-right:10px;padding-bottom:1px;padding-left:10px">
<p class="has-v-8-black-color has-text-color has-link-color has-inter-font-family has-font-down-4-font-size wp-elements-1 wp-block-paragraph" style="font-style:normal;font-weight:700;text-transform:uppercase">new</p>
</div>
<p class="has-text-align-left has-v-8-black-color has-text-color has-link-color has-font-root-font-size wp-elements-2 wp-block-paragraph" style="margin-top:0.4rem;margin-right:0;margin-bottom:0.4rem;margin-left:0;font-style:normal;font-weight:700;line-height:1.2">Semaphore Product News</p>
<p class="has-text-align-left is-style-arrow-link has-text-color has-link-color has-font-down-3-font-size wp-elements-3 wp-block-paragraph" style="color:#2865de;margin-top:0;margin-bottom:0;font-style:normal;font-weight:700"><a href="https://semaphore.io/category/semaphore-news">Read the update</a><a href="https://semaphore.io/product-news-extending-ci-cd-and-whats-next-for-semaphore">s</a> <img decoding="async" width="13" height="12" class="wp-image-23293" style="width: 13px;" src="https://semaphore.io/wp-content/uploads/2024/03/arrow.svg" alt=""></p>
</div>
<figure class="wp-block-image size-full is-resized"><img fetchpriority="high" decoding="async" width="940" height="788" src="https://semaphore.io/wp-content/uploads/2026/03/Product-drop-down-img.png" alt="" class="wp-image-27499" style="width:214px" srcset="https://semaphore.io/wp-content/uploads/2026/03/Product-drop-down-img.png 940w, https://semaphore.io/wp-content/uploads/2026/03/Product-drop-down-img-784x657.png 784w, https://semaphore.io/wp-content/uploads/2026/03/Product-drop-down-img-768x644.png 768w, https://semaphore.io/wp-content/uploads/2026/03/Product-drop-down-img-165x138.png 165w" sizes="(max-width: 940px) 100vw, 940px" /></figure>
</div>
</div></li></ul></div>
</li>
<li id="menu-item-26780" class="side menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-26780"><a href="#">Solutions</a>
<div class='sub-menu-wrap'>
<ul class='sub-menu'>
<li id="menu-item-26807" class="empty menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-26807"><a href="#">Menu Item</a>
<ul class='sub-menu'>
<li id="menu-item-23223" class="title menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-23223"><a href="#">Use Cases</a>
<ul class='sub-menu'>
<li id="menu-item-23224" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23224"><a href="https://semaphore.io/product/ios">iOS</a></li>
<li id="menu-item-23225" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23225"><a href="https://semaphore.io/product/docker">Docker &#038; Kubernetes</a></li>
<li id="menu-item-23226" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23226"><a href="https://semaphore.io/product/android">Android</a></li>
</ul>
</li>
<li id="menu-item-23241" class="title second menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-23241"><a href="#">Compare</a>
<ul class='sub-menu'>
<li id="menu-item-27506" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-27506"><a href="https://semaphore.io/semaphore-ci-cd-benchmark-performance-and-cost-analysis">Benchmark</a></li>
<li id="menu-item-23243" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23243"><a href="https://semaphore.io/resources/semaphore-vs-jenkins">vs Jenkins</a></li>
<li id="menu-item-23245" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23245"><a href="https://semaphore.io/resources/semaphore-vs-github-actions">vs GitHub Actions</a></li>
<li id="menu-item-23242" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23242"><a href="https://semaphore.io/resources/semaphoreci-vs-travisci">vs Travis CI</a></li>
<li id="menu-item-23247" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23247"><a href="https://semaphore.io/resources/semaphoreci-vs-bitbucket-pipelines">vs Bitbucket</a></li>
<li id="menu-item-27752" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27752"><a href="https://semaphore.io/semaphore-vs-gitlab-ci">vs GitLab CI</a></li>
<li id="menu-item-27765" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27765"><a href="https://semaphore.io/semaphore-vs-circleci">vs CircleCI</a></li>
<li id="menu-item-27772" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27772"><a href="https://semaphore.io/semaphore-vs-buildkite">vs Buildkite</a></li>
</ul>
</li>
</ul>
</li>
<li class='menu-widget'><div id="block-44" class="submenu-widget solutions-widget">
<div class="wp-block-group is-style-columnspacebetween has-background is-content-justification-left is-layout-constrained wp-container-core-group-is-layout-48a2a079 wp-block-group-is-layout-constrained" style="border-radius:20px;background:linear-gradient(182deg,rgb(215,227,252) 27%,rgb(255,242,183) 100%);padding-top:var(--wp--preset--spacing--40);padding-right:1rem;padding-bottom:var(--wp--preset--spacing--40);padding-left:1rem">
<div class="wp-block-group is-content-justification-left is-layout-constrained wp-container-core-group-is-layout-1364a37d wp-block-group-is-layout-constrained">
<div class="wp-block-group is-style-displayinline has-v-8-yellow-background-color has-background is-layout-constrained wp-container-core-group-is-layout-ae589722 wp-block-group-is-layout-constrained" style="border-radius:50px;padding-top:1px;padding-right:10px;padding-bottom:1px;padding-left:10px">
<p class="has-v-8-black-color has-text-color has-link-color has-inter-font-family has-font-down-4-font-size wp-elements-4 wp-block-paragraph" style="font-style:normal;font-weight:700;text-transform:uppercase">WHITEPAPER</p>
</div>
<p class="has-text-align-left has-v-8-black-color has-text-color has-link-color has-font-root-font-size wp-elements-5 wp-block-paragraph" style="margin-top:0.4rem;margin-right:0;margin-bottom:0.4rem;margin-left:0;font-style:normal;font-weight:700;line-height:1.2">How does Semaphore Open Source work?</p>
<p class="has-text-align-left is-style-arrow-link has-text-color has-link-color has-font-down-3-font-size wp-elements-6 wp-block-paragraph" style="color:#2865de;margin-top:0;margin-bottom:0;font-style:normal;font-weight:700"><a href="https://semaphore.io/resources/semaphore-open-source">Download</a> <img decoding="async" width="13" height="12" class="wp-image-23293" style="width: 13px;" src="https://semaphore.io/wp-content/uploads/2024/03/arrow.svg" alt=""></p>
</div>
<figure class="wp-block-image size-full is-resized"><img decoding="async" width="376" height="328" src="https://semaphore.io/wp-content/uploads/2025/07/how-it-works-semaphore-open-source.png" alt="" class="wp-image-26812" style="width:188px" srcset="https://semaphore.io/wp-content/uploads/2025/07/how-it-works-semaphore-open-source.png 376w, https://semaphore.io/wp-content/uploads/2025/07/how-it-works-semaphore-open-source-165x144.png 165w" sizes="(max-width: 376px) 100vw, 376px" /></figure>
</div>
</div></li></ul></div>
</li>
<li id="menu-item-26758" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-26758"><a href="https://semaphore.io/pricing">Pricing</a></li>
<li id="menu-item-26199" class="side menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-26199"><a href="#">Resources</a>
<div class='sub-menu-wrap'>
<ul class='sub-menu'>
<li id="menu-item-26806" class="empty menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-26806"><a href="#">Menu Item</a>
<ul class='sub-menu'>
<li id="menu-item-26786" class="title menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-26786"><a href="#">Explore</a>
<ul class='sub-menu'>
<li id="menu-item-25954" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-25954"><a href="https://docs.semaphore.io/">Cloud Docs</a></li>
<li id="menu-item-25955" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-25955"><a href="https://docs.semaphore.io/CE/getting-started/install">Community Edition Docs</a></li>
<li id="menu-item-23232" class="menu-item menu-item-type-post_type menu-item-object-page current_page_parent menu-item-23232"><a href="https://semaphore.io/blog">Blog</a></li>
<li id="menu-item-23233" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23233"><a href="https://semaphore.io/podcast">Engineering Talks 🎙️</a></li>
<li id="menu-item-23230" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23230"><a href="https://semaphore.io/resources">Resources</a></li>
<li id="menu-item-23987" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-23987"><a href="https://semaphore.io/cicd-learning-hub">CI/CD Learning tool</a></li>
<li id="menu-item-23235" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23235"><a href="https://semaphore.io/newsletter">Newsletter</a></li>
</ul>
</li>
<li id="menu-item-23219" class="title second menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-23219"><a href="#">Community</a>
<ul class='sub-menu'>
<li id="menu-item-25830" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-25830"><a target="_blank" href="https://www.youtube.com/c/SemaphoreCI">Youtube ↗</a></li>
<li id="menu-item-25831" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-25831"><a target="_blank" href="https://discord.semaphore.io/">Discord ↗</a></li>
<li id="menu-item-25832" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-25832"><a target="_blank" href="https://github.com/semaphoreio">GitHub ↗</a></li>
</ul>
</li>
</ul>
</li>
<li class='menu-widget'><div id="block-45" class="submenu-widget resources-widget">
<div class="wp-block-group lock-width fullheight is-vertical is-nowrap is-layout-flex wp-container-core-group-is-layout-76d41a2c wp-block-group-is-layout-flex">
<div class="wp-block-group item-heightres lock-width has-v-8-yellow-background-color has-background is-content-justification-left is-layout-constrained wp-container-core-group-is-layout-f65fd461 wp-block-group-is-layout-constrained" style="border-radius:20px;padding-top:var(--wp--preset--spacing--50);padding-right:1.5rem;padding-bottom:var(--wp--preset--spacing--50);padding-left:1.5rem">
<div class="wp-block-group is-content-justification-left is-layout-constrained wp-container-core-group-is-layout-17c462e1 wp-block-group-is-layout-constrained">
<p class="has-v-8-black-color has-text-color has-link-color wp-elements-7 wp-block-paragraph" style="margin-top:0;margin-bottom:0;font-style:normal;font-weight:700;line-height:1.2">Semaphore Blog</p>
</div>
<p class="is-style-arrow-link has-text-color has-link-color has-font-down-3-font-size wp-elements-8 wp-block-paragraph" style="color:#2865de;margin-top:0.5rem;margin-bottom:0.5rem;font-style:normal;font-weight:700"><a href="https://semaphore.io/blog" data-type="link" data-id="https://semaphore.io/blog">Explore</a> <img decoding="async" width="13" height="12" class="wp-image-23293" style="width: 13px;" src="https://semaphore.io/wp-content/uploads/2024/03/arrow.svg" alt=""></p>
<div class="wp-block-group is-content-justification-left is-layout-constrained wp-container-core-group-is-layout-c4f0a831 wp-block-group-is-layout-constrained">
<figure class="wp-block-image size-full is-resized"><img decoding="async" width="325" height="73" src="https://semaphore.io/wp-content/uploads/2026/03/uncut-thumb.png" alt="" class="wp-image-27509" style="width:212px" srcset="https://semaphore.io/wp-content/uploads/2026/03/uncut-thumb.png 325w, https://semaphore.io/wp-content/uploads/2026/03/uncut-thumb-165x37.png 165w" sizes="(max-width: 325px) 100vw, 325px" /></figure>
</div>
</div>
<div class="wp-block-group item-heightres lock-width has-background is-layout-constrained wp-container-core-group-is-layout-fd8b4a01 wp-block-group-is-layout-constrained" style="border-radius:20px;background:linear-gradient(180deg,rgb(215,227,252) 27%,rgb(255,242,183) 100%);margin-top:0;margin-bottom:0;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0">
<div class="wp-block-group lock-width fullheight is-content-justification-left is-layout-constrained wp-container-core-group-is-layout-8b0d4003 wp-block-group-is-layout-constrained" style="border-radius:20px;padding-top:var(--wp--preset--spacing--50);padding-right:var(--wp--preset--spacing--50);padding-bottom:2.5rem;padding-left:var(--wp--preset--spacing--50)">
<div class="wp-block-group is-content-justification-left is-layout-constrained wp-container-core-group-is-layout-17c462e1 wp-block-group-is-layout-constrained">
<p class="has-v-8-black-color has-text-color has-link-color wp-elements-9 wp-block-paragraph" style="margin-top:0;margin-bottom:0;font-style:normal;font-weight:700;line-height:1.2">Semaphore on YouTube</p>
</div>
<p class="is-style-arrow-link has-text-color has-link-color has-font-down-3-font-size wp-elements-10 wp-block-paragraph" style="color:#2865de;margin-top:0.5rem;margin-bottom:0.5rem;font-style:normal;font-weight:700"><a href="https://www.youtube.com/c/SemaphoreCI" target="_blank" rel="noreferrer noopener">Watch</a> <img decoding="async" width="9" height="9" class="wp-image-26813" style="width: 9px;" src="https://semaphore.io/wp-content/uploads/2025/07/arrow-up.svg" alt=""></p>
<div class="wp-block-group is-content-justification-right is-layout-constrained wp-container-core-group-is-layout-4ce229e9 wp-block-group-is-layout-constrained">
<figure class="wp-block-image size-full is-resized" style="margin-top:-20px;margin-bottom:-20px"><a href="https://www.youtube.com/c/SemaphoreCI" target="_blank" rel=" noreferrer noopener"><img decoding="async" width="225" height="225" src="https://semaphore.io/wp-content/uploads/2026/03/youtube-thumb.png" alt="" class="wp-image-27510" style="width:74px" srcset="https://semaphore.io/wp-content/uploads/2026/03/youtube-thumb.png 225w, https://semaphore.io/wp-content/uploads/2026/03/youtube-thumb-104x104.png 104w, https://semaphore.io/wp-content/uploads/2026/03/youtube-thumb-68x68.png 68w, https://semaphore.io/wp-content/uploads/2026/03/youtube-thumb-165x165.png 165w" sizes="(max-width: 225px) 100vw, 225px" /></a></figure>
</div>
</div>
</div>
</div>
</div><div id="block-46" class="submenu-widget resources-widget"><style>.lock-width{width:274px;}.fullheight, .resources-widget{height:100%;} .item-heightres{height:50%;}</style></div></li></ul></div>
</li>
</ul></div> </nav><!-- #site-navigation -->
<div class="loginandsignup">
<div class="github">
<a href="https://github.com/semaphoreio/semaphore/" target="_blank" rel="noopener noreferrer"><svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg" style="margin-right: 0.5rem">
<g clip-path="url(#clip0_4396_48)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.4635 0C9.11799 0.0426659 5.92622 1.41512 3.58941 3.81584C1.2526 6.21656 -0.0381054 9.44917 0.000857167 12.8035C-0.00906197 15.4632 0.800952 18.061 2.32006 20.2415C3.83917 22.4219 5.99316 24.0785 8.4873 24.9845C8.58493 25.0133 8.6879 25.0189 8.78808 25.001C8.88825 24.983 8.98288 24.9419 9.0645 24.881C9.14612 24.82 9.21249 24.7409 9.25836 24.6498C9.30424 24.5588 9.32836 24.4582 9.32883 24.3562V22.1606C5.88677 22.946 5.12358 20.4315 5.12358 20.4315C4.91606 19.6529 4.4253 18.9804 3.74795 18.5465C2.60139 17.7611 3.82391 17.7611 3.82391 17.7611C4.22241 17.8247 4.60136 17.978 4.93232 18.2094C5.26329 18.4409 5.53766 18.7445 5.73485 19.0975C5.89404 19.4108 6.11456 19.6888 6.38325 19.9148C6.65193 20.1408 6.96328 20.3103 7.29871 20.413C7.63414 20.5157 7.98677 20.5497 8.33557 20.5128C8.68436 20.4759 9.02217 20.3689 9.32883 20.1983C9.37292 19.5497 9.64357 18.9375 10.0932 18.4692C7.34074 18.1586 4.43517 17.053 4.43517 12.1013C4.4049 10.8216 4.87128 9.58011 5.73603 8.63838C5.3922 7.55736 5.44482 6.38876 5.8844 5.3432C5.8844 5.3432 6.95262 5.02904 9.32645 6.6796C10.3454 6.38999 11.4024 6.25757 12.4611 6.28689C13.5176 6.29658 14.5694 6.42835 15.5957 6.6796C17.9696 5.02904 19.0378 5.3432 19.0378 5.3432C19.476 6.41835 19.5301 7.61231 19.1909 8.72287C20.0378 9.67401 20.5029 10.9061 20.4965 12.1811C20.4965 17.1316 17.5909 18.1538 14.8385 18.468C15.1376 18.7785 15.3673 19.1494 15.5124 19.5558C15.6575 19.9623 15.7146 20.3951 15.68 20.8254V24.3621C15.6805 24.4642 15.7046 24.5647 15.7505 24.6558C15.7963 24.7469 15.8627 24.826 15.9443 24.8869C16.026 24.9479 16.1206 24.9889 16.2208 25.0069C16.3209 25.0249 16.4239 25.0193 16.5215 24.9905C19.0242 24.0964 21.1864 22.4418 22.7068 20.2573C24.2271 18.0728 25.0299 15.4671 25.0032 12.8035C25.0121 9.44488 23.701 6.218 21.354 3.82162C19.0069 1.42523 15.8129 0.052251 12.4635 0Z" fill="#0D1421"/>
</g>
<defs>
<clipPath id="clip0_4396_48">
<rect width="25" height="25" fill="white"/>
</clipPath>
</defs>
</svg>
</a>
</div>
<div class="top-right"><ul id="top-right" class="menu"><li id="menu-item-23204" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-23204"><a href="https://id.semaphoreci.com/login">Login</a></li>
<li id="menu-item-27531" class="button-b menu-item menu-item-type-post_type menu-item-object-page menu-item-27531"><a href="https://semaphore.io/lets-talk">Let’s talk</a></li>
<li id="menu-item-23203" class="button-w menu-item menu-item-type-custom menu-item-object-custom menu-item-23203"><a href="https://id.semaphoreci.com/signup">Start free</a></li>
</ul></div> <div id="widget_polylang">
<div class="wp-block-group widget_polylang is-layout-constrained wp-block-group-is-layout-constrained"><div class="widget widget_polylang"><label class="screen-reader-text" for="lang_choice_polylang--1">Choose a language</label><select name="lang_choice_polylang--1" id="lang_choice_polylang--1" class="pll-switcher-select">
<option value="https://semaphore.io/blog/bad-microservices" lang="en-US" selected='selected' data-lang="{&quot;id&quot;:0,&quot;name&quot;:&quot;EN&quot;,&quot;slug&quot;:&quot;en&quot;,&quot;dir&quot;:0}">EN</option>
</select>
<script>
document.getElementById( "lang_choice_polylang--1" ).addEventListener( "change", function ( event ) { location.href = event.currentTarget.value; } )
</script></div></div>
</div> </div><!-- .loginandsignup -->
</div>
</header><!-- #masthead -->
<div class="subscribe-blog transparent">
<div class="wrap">
<div class="logo-blog">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="88.386" height="23.004" viewBox="0 0 88.386 23.004">
<defs>
<clipPath id="clip-path">
<rect id="Rectangle_8739" data-name="Rectangle 8739" width="35.879" height="22.371" fill="#0a1120"/>
</clipPath>
</defs>
<g id="Group_10241" data-name="Group 10241" transform="translate(-170 -23.314)">
<g id="Mask_Group_6551" data-name="Mask Group 6551" transform="translate(170 23.314)" clip-path="url(#clip-path)">
<path id="Path_42150" data-name="Path 42150" d="M13.2,101.545A9.765,9.765,0,0,1,6.218,98.6L0,92.3l3.719-3.782,6.218,6.309a4.571,4.571,0,0,0,6.519,0l4.923-5.007a1.8,1.8,0,0,1,2.575,0L26.393,92.3l-6.2,6.324A9.749,9.749,0,0,1,13.2,101.545Z" transform="translate(0 -79.173)" fill="#0a1120"/>
<path id="Path_42151" data-name="Path 42151" d="M112.562,13.061l-6.218-6.324a4.544,4.544,0,0,0-6.519,0L94.9,11.745a1.8,1.8,0,0,1-2.575,0L89.887,9.264,96.105,2.94a9.77,9.77,0,0,1,13.972,0L116.3,9.264Z" transform="translate(-80.402 0)" fill="#0a1120"/>
</g>
<path id="Path_42335" data-name="Path 42335" d="M1.267,0V-14.545H7.085a6.609,6.609,0,0,1,2.68.477A3.579,3.579,0,0,1,11.38-12.75a3.494,3.494,0,0,1,.54,1.932,3.125,3.125,0,0,1-.343,1.5,2.937,2.937,0,0,1-.937,1.049,3.85,3.85,0,0,1-1.351.579v.142a3.319,3.319,0,0,1,1.56.471,3.328,3.328,0,0,1,1.185,1.209,3.607,3.607,0,0,1,.455,1.854,3.785,3.785,0,0,1-.572,2.061A3.876,3.876,0,0,1,10.23-.524,6.451,6.451,0,0,1,7.477,0ZM4.341-2.517H6.847a2.908,2.908,0,0,0,1.876-.492,1.626,1.626,0,0,0,.589-1.315,1.966,1.966,0,0,0-.291-1.067,1.975,1.975,0,0,0-.827-.727,2.88,2.88,0,0,0-1.279-.263H4.341Zm0-5.943H6.619a2.714,2.714,0,0,0,1.125-.223,1.852,1.852,0,0,0,.782-.636,1.69,1.69,0,0,0,.286-.988,1.6,1.6,0,0,0-.557-1.272,2.335,2.335,0,0,0-1.58-.484H4.341Zm13.108-6.085V0H14.426V-14.545ZM24.8.21A5.555,5.555,0,0,1,21.936-.5,4.77,4.77,0,0,1,20.08-2.467a6.344,6.344,0,0,1-.653-2.948,6.374,6.374,0,0,1,.653-2.957,4.766,4.766,0,0,1,1.857-1.974,5.555,5.555,0,0,1,2.859-.705,5.555,5.555,0,0,1,2.859.705,4.766,4.766,0,0,1,1.857,1.974,6.374,6.374,0,0,1,.653,2.957,6.344,6.344,0,0,1-.653,2.948A4.77,4.77,0,0,1,27.655-.5,5.555,5.555,0,0,1,24.8.21Zm.017-2.341a1.872,1.872,0,0,0,1.254-.43,2.631,2.631,0,0,0,.766-1.176,5.158,5.158,0,0,0,.259-1.695,5.179,5.179,0,0,0-.259-1.7,2.651,2.651,0,0,0-.766-1.18,1.864,1.864,0,0,0-1.254-.433,1.922,1.922,0,0,0-1.28.433,2.617,2.617,0,0,0-.774,1.18,5.179,5.179,0,0,0-.259,1.7,5.158,5.158,0,0,0,.259,1.695,2.6,2.6,0,0,0,.774,1.176A1.93,1.93,0,0,0,24.813-2.131ZM37.057,4.318a7.048,7.048,0,0,1-2.521-.4,4.22,4.22,0,0,1-1.668-1.091,3.328,3.328,0,0,1-.8-1.546L34.869.9a1.787,1.787,0,0,0,.4.611A1.982,1.982,0,0,0,36,1.969a3.2,3.2,0,0,0,1.121.173,2.662,2.662,0,0,0,1.629-.477A1.864,1.864,0,0,0,39.4.062V-1.932h-.125a2.951,2.951,0,0,1-.6.859,3.018,3.018,0,0,1-1.021.663,3.908,3.908,0,0,1-1.492.256,4.421,4.421,0,0,1-2.232-.574,4.042,4.042,0,0,1-1.6-1.754,6.644,6.644,0,0,1-.594-3,7.041,7.041,0,0,1,.6-3.1,4.342,4.342,0,0,1,1.611-1.859,4.127,4.127,0,0,1,2.205-.619,3.4,3.4,0,0,1,1.53.309,3.071,3.071,0,0,1,1,.766,3.975,3.975,0,0,1,.584.9h.119v-1.835h3V.108A3.845,3.845,0,0,1,41.7,2.437a4.143,4.143,0,0,1-1.886,1.408A7.507,7.507,0,0,1,37.057,4.318Zm.062-6.744a2.07,2.07,0,0,0,1.238-.366,2.281,2.281,0,0,0,.781-1.051,4.481,4.481,0,0,0,.271-1.646,4.7,4.7,0,0,0-.268-1.666,2.414,2.414,0,0,0-.778-1.1,1.989,1.989,0,0,0-1.244-.39,1.977,1.977,0,0,0-1.261.4,2.452,2.452,0,0,0-.773,1.112,4.727,4.727,0,0,0-.262,1.64,4.517,4.517,0,0,0,.265,1.627A2.3,2.3,0,0,0,35.864-2.8,2.065,2.065,0,0,0,37.119-2.426Z" transform="translate(216 42)" fill="#0a1120"/>
</g>
</svg>
</div>
<div class="sub-form">
<div class="wpcf7 no-js" id="wpcf7-f20434-o1" lang="en-US" dir="ltr" data-wpcf7-id="20434">
<div class="screen-reader-response"><p role="status" aria-live="polite" aria-atomic="true"></p> <ul></ul></div>
<form action="/blog/bad-microservices#wpcf7-f20434-o1" method="post" class="wpcf7-form init" aria-label="Contact form" novalidate="novalidate" data-status="init">
<fieldset class="hidden-fields-container"><input type="hidden" name="_wpcf7" value="20434" /><input type="hidden" name="_wpcf7_version" value="6.1.7" /><input type="hidden" name="_wpcf7_locale" value="en_US" /><input type="hidden" name="_wpcf7_unit_tag" value="wpcf7-f20434-o1" /><input type="hidden" name="_wpcf7_container_post" value="0" /><input type="hidden" name="_wpcf7_posted_data_hash" value="" />
</fieldset>
<div class="mc4wp-form-fields"><span class="wpcf7-form-control-wrap" data-name="your-email"><input size="40" maxlength="400" class="wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email" aria-required="true" aria-invalid="false" placeholder="Your email" value="" type="email" name="your-email" /></span><input class="wpcf7-form-control wpcf7-submit has-spinner" type="submit" value="Subscribe" /><span id="wpcf7-6aa4e2427a8c4-wrapper" class="wpcf7-form-control-wrap cf7apps-honeypot-wrap mail-wrap" data-cf7apps-honeypot="mail" style="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;"><input type="hidden" name="mail-random-hash" value="20260912"><input type="hidden" name="mail-time-token" value="MTc4OTE5MDcyMg==.e115f02544635093e3d726f54ccae01fdd742d0272a9ab2fde8cac1f389352e4"><label
for="wpcf7-6aa4e2427a8c4-field"
class="hp-message"
>Please leave this field empty.</label><input
id="wpcf7-6aa4e2427a8c4-field"
class="wpcf7-form-control wpcf7-text"
type="text"
name="txuliewii6rp"
value=""
autocomplete="new-password"
tabindex="1000"
data-cf7apps-tabindex="1000"
/></span></div>
<style>
.wpcf7-form.sent .mc4wp-form-fields
{
display:none!important;
}
</style><p style="display: none !important;" class="akismet-fields-container" data-prefix="_wpcf7_ak_"><label>&#916;<textarea name="_wpcf7_ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_1" name="_wpcf7_ak_js" value="184"/><script>
document.getElementById( "ak_js_1" ).setAttribute( "value", ( new Date() ).getTime() );
</script>
</p><div class="wpcf7-response-output" aria-hidden="true"></div>
</form>
</div>
</div>
</div>
</div>
<div class="mobile-nav">
<div class="site-branding">
<p class="site-title"><a href="https://semaphore.io/" rel="home">Semaphore</a></p>
</div><!-- .site-branding -->
<div class="nav-trigger menu">
<div class="menu-global menu-top"></div>
<div class="menu-global menu-middle"></div>
<div class="menu-global menu-bottom"></div>
</div>
</div>
<div id="mobileNav" class="nav-menu overlay transparent f-sixteen">
<div class="overlay-content">
<div class="menu">
<div class="top-menu-semaphore"><ul id="primary-menu" class="menu"><li class="side menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-25828"><a href="#">Product</a>
<ul class="sub-menu">
<li class="title menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-23207"><a href="#">Features</a>
<ul class="sub-menu">
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23208"><a href="https://semaphore.io/product/continuous-integration-and-pipelines">Continuous Integration &#038; Pipelines</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23209"><a href="https://semaphore.io/product/deployments-and-automation">Deployments &#038; Automation</a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-27232"><a href="https://docs.semaphore.io/using-semaphore/ai/mcp-server">MCP Server 🆕</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23210"><a href="https://semaphore.io/product/metrics-and-observability">Metrics &#038; Observability</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23211"><a href="https://semaphore.io/product/security-and-compliance">Security &#038; Compliance</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23212"><a href="https://semaphore.io/product/developer-toolkit">Developer Toolkit</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-24172"><a href="https://semaphore.io/product/test-reports">Test reports</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-24174"><a href="https://semaphore.io/product/monorepos">Monorepos</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-24175"><a href="https://semaphore.io/product/self-hosted-agents">Self-hosted agents</a></li>
</ul>
</li>
<li class="empty menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-26804"><a href="#">Menu Item</a>
<ul class="sub-menu">
<li class="title menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-26133"><a href="#">Deployment options</a>
<ul class="sub-menu">
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-26135"><a href="https://semaphore.io/open-source">Open source</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-26344"><a href="https://semaphore.io/cloud">Cloud</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-26134"><a href="https://semaphore.io/hybrid">Hybrid</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-26745"><a href="https://semaphore.io/enterprise">Enterprise</a></li>
</ul>
</li>
<li class="title second menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-26375"><a href="#">Explore</a>
<ul class="sub-menu">
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-26376"><a href="https://semaphore.io/customers">Customers</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-26379"><a href="https://semaphore.io/security">Security</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="side menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-26780"><a href="#">Solutions</a>
<ul class="sub-menu">
<li class="empty menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-26807"><a href="#">Menu Item</a>
<ul class="sub-menu">
<li class="title menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-23223"><a href="#">Use Cases</a>
<ul class="sub-menu">
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23224"><a href="https://semaphore.io/product/ios">iOS</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23225"><a href="https://semaphore.io/product/docker">Docker &#038; Kubernetes</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23226"><a href="https://semaphore.io/product/android">Android</a></li>
</ul>
</li>
<li class="title second menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-23241"><a href="#">Compare</a>
<ul class="sub-menu">
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-27506"><a href="https://semaphore.io/semaphore-ci-cd-benchmark-performance-and-cost-analysis">Benchmark</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23243"><a href="https://semaphore.io/resources/semaphore-vs-jenkins">vs Jenkins</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23245"><a href="https://semaphore.io/resources/semaphore-vs-github-actions">vs GitHub Actions</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23242"><a href="https://semaphore.io/resources/semaphoreci-vs-travisci">vs Travis CI</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23247"><a href="https://semaphore.io/resources/semaphoreci-vs-bitbucket-pipelines">vs Bitbucket</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27752"><a href="https://semaphore.io/semaphore-vs-gitlab-ci">vs GitLab CI</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27765"><a href="https://semaphore.io/semaphore-vs-circleci">vs CircleCI</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27772"><a href="https://semaphore.io/semaphore-vs-buildkite">vs Buildkite</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-26758"><a href="https://semaphore.io/pricing">Pricing</a></li>
<li class="side menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-26199"><a href="#">Resources</a>
<ul class="sub-menu">
<li class="empty menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-26806"><a href="#">Menu Item</a>
<ul class="sub-menu">
<li class="title menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-26786"><a href="#">Explore</a>
<ul class="sub-menu">
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-25954"><a href="https://docs.semaphore.io/">Cloud Docs</a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-25955"><a href="https://docs.semaphore.io/CE/getting-started/install">Community Edition Docs</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page current_page_parent menu-item-23232"><a href="https://semaphore.io/blog">Blog</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23233"><a href="https://semaphore.io/podcast">Engineering Talks 🎙️</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23230"><a href="https://semaphore.io/resources">Resources</a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-23987"><a href="https://semaphore.io/cicd-learning-hub">CI/CD Learning tool</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23235"><a href="https://semaphore.io/newsletter">Newsletter</a></li>
</ul>
</li>
<li class="title second menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-23219"><a href="#">Community</a>
<ul class="sub-menu">
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-25830"><a target="_blank" href="https://www.youtube.com/c/SemaphoreCI">Youtube ↗</a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-25831"><a target="_blank" href="https://discord.semaphore.io/">Discord ↗</a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-25832"><a target="_blank" href="https://github.com/semaphoreio">GitHub ↗</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul></div> <div class="top-menu-semaphore"><ul id="Mobile-menu" class="menu"><li id="menu-item-23615" class="button menu-item menu-item-type-custom menu-item-object-custom menu-item-23615"><a href="https://semaphore.io/signup">Get started</a></li>
<li id="menu-item-23239" class="link menu-item menu-item-type-custom menu-item-object-custom menu-item-23239"><a href="https://semaphore.io/login">Login</a></li>
</ul></div> </div>
</div>
</div>
<div id="content" class="site-content">
<div id="primary" class="content-area">
<main id="main" class="site-main single-blog">
<article id="post-19483" class="post-19483 post type-post status-publish format-standard has-post-thumbnail hentry category-engineering" itemscope itemtype="http://schema.org/Article" >
<div class="single-inner-wrap">
<aside class="blog-single-left-sidebar" aria-label="Blog navigation">
<a class="blog-index-link" href="https://semaphore.io/blog">
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
<rect width="22" height="22" rx="11" fill="#F9F6F0"/>
<mask id="mask0_4499_3028" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="3" y="3" width="16" height="16">
<rect x="3" y="3" width="16" height="16" fill="#D9D9D9"/>
</mask>
<g mask="url(#mask0_4499_3028)">
<path d="M9.40001 14.2008L6.20001 11.0008L9.40001 7.80078L10.25 8.65078L8.50001 10.4008H15.8V11.6008H8.50001L10.25 13.3508L9.40001 14.2008Z" fill="#1C1B1F"/>
</g>
</svg>
<span>Blog</span>
</a>
</aside>
<div class="single-blog-main-column">
<header class="entry-header">
<div class="single-post-category-pills" aria-label="Post categories">
<a href="https://semaphore.io/blog?blog_category=engineering#blog-list" class="single-post-category-pill">Software Engineering</a>
</div>
<h1 itemprop="name" class="entry-title">When Microservices Are a Bad Idea</h1>
<div class="single-post-date">
<span itemprop="datePublished" content="2022-07-28">28 Jul 2022</span>
<span itemprop="dateModified" content="2024-10-04">Updated: 4 Oct 2024</span>
</div>
<div class="author-wrap">
<div class="entry-meta user-info-tooltip" itemprop="author" itemscope itemtype="http://schema.org/Person">
<div class="image">
<img alt='mm' src='https://semaphore.io/wp-content/uploads/2020/10/tfernandez.jpeg' class='avatar avatar-60 photo' height='60' width='60' /> </div>
<div class="post-info">
<div class="rev-info f-fourteen">Written by:</div>
<div class="name f-sixteen" itemprop="name"><a href="https://semaphore.io/blog?blog_author=tfernandez&#038;blog_author_name=Tomas%20Fernandez#blog-list">Tomas Fernandez</a></div>
</div>
<span class="user-tooltip-content">
<div class="info">
<div class="image">
<img alt='mm' src='https://semaphore.io/wp-content/uploads/2020/10/tfernandez.jpeg' class='avatar avatar-40 photo' height='40' width='40' /> </div>
<div class="name f-twenty-two"><a href="https://semaphore.io/blog?blog_author=tfernandez&#038;blog_author_name=Tomas%20Fernandez#blog-list">Tomas Fernandez</a></div>
</div>
<div class="author-description f-fourteen">I picked up most of my skills during the years I worked at IBM. Was a DBA, developer, and cloud engineer for a time. After that, I went into freelancing, where I found the passion for writing. Now, I'm a full-time writer at Semaphore.</div>
<div class="social-links"><div class="author-twitter"><a href="https://twitter.com/TomFernBlog" rel="nofollow" class="twitter-link" target="_blank"><svg width="22" height="19" viewBox="0 0 22 19" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16.5544 0H19.7775L12.7358 8.04821L21.0198 19H14.5335L9.45323 12.3578L3.6402 19H0.415077L7.94687 10.3915L0 0H6.65097L11.2431 6.07123L16.5544 0ZM15.4231 17.0708H17.2091L5.68051 1.8279H3.76395L15.4231 17.0708Z" fill="#202B30"/>
</svg>
</a> </div>
<div class="author-linkedIn"><a href="https://www.linkedin.com/in/pablo-tomas-fernandez-b6077514/" rel="nofollow" class="linkedin-link" target="_blank"><svg width="20" height="19" viewBox="0 0 20 19" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.4459 0.000386938H1.54992C1.1479 -0.00747404 0.75906 0.139491 0.468555 0.409094C0.17805 0.678697 0.00956422 1.04896 0 1.43879V17.5602C0.00929283 17.9502 0.17766 18.3207 0.468194 18.5905C0.758729 18.8604 1.14773 19.0075 1.54992 18.9996H18.4459C18.8488 19.0086 19.2389 18.8619 19.5303 18.592C19.8218 18.3221 19.9907 17.9509 20 17.5602V1.43879C19.9904 1.04825 19.8214 0.67736 19.53 0.407642C19.2386 0.137923 18.8486 -0.00855892 18.4459 0.000386938ZM7.00068 14.2521H4.9987V7.59846H7.00068V14.2521ZM5.99448 6.64794C5.80212 6.64476 5.61501 6.58657 5.45661 6.48068C5.29821 6.37479 5.17558 6.2259 5.10408 6.05269C5.03259 5.87947 5.01542 5.68965 5.05473 5.50701C5.09404 5.32438 5.18807 5.15706 5.32504 5.02604C5.46201 4.89502 5.63582 4.80614 5.82467 4.77053C6.01353 4.73492 6.20902 4.75417 6.38663 4.82587C6.56425 4.89757 6.71608 5.01853 6.82309 5.17358C6.93011 5.32862 6.98753 5.51086 6.98818 5.69743C6.98825 5.82221 6.96258 5.94575 6.91267 6.06076C6.86276 6.17578 6.78962 6.27995 6.69757 6.36713C6.50934 6.54545 6.25657 6.64517 5.99344 6.64491L5.99448 6.64794ZM15.0003 14.2521H12.9993V10.45C12.9993 9.64192 12.7056 9.00454 11.5411 9.00454C10.3547 9.00454 10.0068 9.53889 10.0068 10.45V14.2521H8.00062V7.59846H10.0016L10.0786 8.22271H10.1109C10.3702 7.90784 10.7131 7.66745 11.1027 7.52739C11.4924 7.38732 11.914 7.35288 12.3223 7.42775C12.7077 7.43397 13.0874 7.51878 13.4368 7.67668C13.7862 7.83458 14.0974 8.06203 14.3502 8.34424C14.603 8.62644 14.7917 8.95708 14.9041 9.31466C15.0164 9.67224 15.0499 10.0488 15.0023 10.4197V14.2521H15.0003Z" fill="#202B30"/>
</svg>
</a> </div></div>
</span>
</div>
<div class="entry-meta user-info-tooltip" itemprop="author" itemscope itemtype="http://schema.org/Person">
<div class="image">
<img alt='Avatar for Dan Ackerson' title='Gravatar for Dan Ackerson' src='https://secure.gravatar.com/avatar/432e1657f908a36388b30a1ccbc1045960bdfd796ab92a625a6fd82dc99e1468?s=60&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/432e1657f908a36388b30a1ccbc1045960bdfd796ab92a625a6fd82dc99e1468?s=120&#038;d=mm&#038;r=g 2x' class='avatar avatar-60 photo' height='60' width='60' loading='lazy' decoding='async'/> </div>
<div class="post-info">
<div class="rev-info f-fourteen">Reviewed by:</div>
<div class="name f-sixteen" itemprop="name"><a href="https://semaphore.io/blog?blog_author=dan-ackerson&#038;blog_author_name=Dan%20Ackerson#blog-list">Dan Ackerson</a></div>
</div>
<span class="user-tooltip-content">
<div class="info">
<div class="image">
<img alt='Avatar for Dan Ackerson' title='Gravatar for Dan Ackerson' src='https://secure.gravatar.com/avatar/432e1657f908a36388b30a1ccbc1045960bdfd796ab92a625a6fd82dc99e1468?s=40&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/432e1657f908a36388b30a1ccbc1045960bdfd796ab92a625a6fd82dc99e1468?s=80&#038;d=mm&#038;r=g 2x' class='avatar avatar-40 photo' height='40' width='40' loading='lazy' decoding='async'/> </div>
<div class="name f-twenty-two"><a href="https://semaphore.io/blog?blog_author=dan-ackerson&#038;blog_author_name=Dan%20Ackerson#blog-list">Dan Ackerson</a></div>
</div>
<div class="author-description f-fourteen">I picked up most of my soft/hardware troubleshooting skills in the US Army.
A decade of Java development drove me to operations, scaling infrastructure
to cope with the thundering herd. Engineering coach and CTO of Teleclinic.</div>
<div class="social-links"><div class="author-twitter"><a href="https://twitter.com/danackerson" rel="nofollow" class="twitter-link" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="18.238" height="14.821" viewBox="0 0 18.238 14.821"><path d="M21.812,12.08a7.445,7.445,0,0,1-2.149.589,3.748,3.748,0,0,0,1.645-2.07,7.49,7.49,0,0,1-2.376.908,3.745,3.745,0,0,0-6.375,3.413,10.624,10.624,0,0,1-7.713-3.909,3.746,3.746,0,0,0,1.158,5,3.731,3.731,0,0,1-1.695-.468c0,.016,0,.031,0,.047a3.745,3.745,0,0,0,3,3.669,3.762,3.762,0,0,1-.986.131,3.707,3.707,0,0,1-.7-.067,3.746,3.746,0,0,0,3.5,2.6,7.55,7.55,0,0,1-5.539,1.549A10.641,10.641,0,0,0,19.955,14.5q0-.243-.01-.485A7.578,7.578,0,0,0,21.812,12.08Z" transform="translate(-3.574 -10.326)" fill="#212121"/></svg></a> </div>
<div class="author-linkedIn"><a href="https://www.linkedin.com/in/danackerson/" rel="nofollow" class="linkedin-link" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="16.157" height="15.828" viewBox="0 0 16.157 15.828"><path d="M14.908.01H1.258a1.228,1.228,0,0,0-1.252,1.2v13.43a1.228,1.228,0,0,0,1.252,1.2h13.65a1.228,1.228,0,0,0,1.255-1.2V1.208A1.228,1.228,0,0,0,14.908.01ZM5.661,11.883H4.045V6.34H5.661ZM4.849,5.548a.789.789,0,1,1,.8-.792.78.78,0,0,1-.235.558.813.813,0,0,1-.569.231Zm7.275,6.335H10.508V8.716c0-.675-.237-1.2-1.182-1.2s-1.24.446-1.24,1.2v3.168H6.47V6.34H8.087l.062.52h.026A1.847,1.847,0,0,1,9.961,6.2,2.219,2.219,0,0,1,12.126,8.69v3.193Z" transform="translate(-0.006 -0.01)" fill="#212121" fill-rule="evenodd"/></svg></a> </div></div>
</span>
</div>
</div>
</header><!-- .entry-header -->
<div class="single-blog-intro">
</div>
<div class="entry-content" itemprop="articleBody">
<p class="wp-block-paragraph">On paper, microservices sound wonderful. They are modular, scalable, and fault tolerant. A lot of companies have had great success using this model, so microservices might naturally seem to be the superior architecture and the best way to start new applications.</p>
<p class="wp-block-paragraph">However, most firms that have succeeded with microservices did not begin with them. Consider the examples of Airbnb and Twitter, which went the microservice route after outgrowing their monoliths and are now <a href="https://thenewstack.io/how-airbnb-and-twitter-cut-back-on-microservice-complexities" target="_blank" rel="noreferrer noopener">battling its complexities</a>. Even successful companies that use microservices appear to still be figuring out the best way to make them work. It is evident that microservices come with their share of tradeoffs.</p>
<p class="wp-block-paragraph">Migrating from a monolith to microservices is also not a simple task, and creating an untested product as a new microservice is even more complicated. Microservices should only be seriously considered after evaluating the alternative paths.</p>
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="When Microservices Are a Bad Idea" width="640" height="360" src="https://www.youtube.com/embed/g0xAgL3s-r0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
<h2 class="wp-block-heading" class="wp-block-heading" id="microservices-are-only-viable-for-mature-products">Microservices are only viable for mature products</h2>
<p class="wp-block-paragraph">On the topic of starting from a microservice design, <a href="https://martinfowler.com/bliki/MonolithFirst.html" target="_blank" rel="noreferrer noopener">Martin Fowler observed that</a>:</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">1. Almost all the successful microservice stories started with a monolith that got too big and was broken up.</p>
<p class="wp-block-paragraph">2. Almost all the cases where a system that was built as a microservice system from scratch, ended up in serious trouble.</p>
<p class="wp-block-paragraph">This pattern has led many to argue that you shouldn&#8217;t start a new project with microservices, even if you&#8217;re sure your application will be big enough to make it worthwhile.</p>
</blockquote>
<p class="wp-block-paragraph">The first design is rarely fully optimized. The first few iterations of any new product are spent finding what users really need. Therefore, success hinges on staying agile and being able to quickly improve, redesign, and refactor. In this regard, microservices are manifestly worse than a monolith. If you don’t nail the initial design, you’re in for a rough start, as it’s much harder to refactor a microservice than a monolith.</p>
<h3 class="wp-block-heading" class="wp-block-heading" id="are-you-a-startup-or-working-on-a-greenfield-project">Are you a startup or working on a greenfield project?</h3>
<p class="wp-block-paragraph">As a startup (not likely in this economy), you already are running against the clock, looking for a breakthrough before the next bad thing happens. You don’t need the scalability at this point (and probably not for a few years yet), so why ignore your customers by using a complicated architecture model?</p>
<p class="wp-block-paragraph">A similar argument can be made when working on greenfield projects, which are unconstrained by earlier work and hence have nothing upon which to base decisions. Sam Newman, author of <a href="https://semaphore.io/blog/books-every-senior-engineer-should-read#building-microservices-designing-fine-grained-systems-by-sam-newman" target="_blank" rel="noreferrer noopener"><em>Building Microservices</em></a><em>: Designing Fine-Grained Systems</em>, stated that it is very difficult to <a href="https://samnewman.io/blog/2015/04/07/microservices-for-greenfield/" target="_blank" rel="noreferrer noopener">build a greenfield project with microservices</a>:</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">I remain convinced that it is much easier to partition an existing &#8220;brownfield&#8221; system than to do so upfront with a new, greenfield system. You have more to work with. You have code you can examine, you can speak to people who use and maintain the system. You also know what &#8216;good&#8217; looks like &#8211; you have a working system to change, making it easier for you to know when you may have got something wrong or been too aggressive in your decision-making process.</p>
</blockquote>
<h2 class="wp-block-heading" class="wp-block-heading" id="microservices-arent-the-best-for-on-premise">Microservices aren’t the best for on-premise</h2>
<p class="wp-block-paragraph">Microservice deployments need robust automation because of all the moving parts. Under normal circumstances, we can rely on <a href="https://semaphore.io/blog/cicd-pipeline" target="_blank" rel="noreferrer noopener">continuous deployment pipelines</a> for the job–Developers deploy the microservices and customers just use the application online.</p>
<p class="wp-block-paragraph">This won’t fly for on-premise applications, where developers publish a package and it&#8217;s up to the customer to manually deploy and configure everything on their own on their private systems. Microservices make all these tasks especially challenging, so this is a release model that does not fit nicely with microservice architecture.</p>
<p class="wp-block-paragraph">To be clear, developing an on-premise microservice application is entirely viable. Semaphore is accomplishing just that with <a href="https://semaphore.io/enterprise/on-premise" target="_blank" rel="noreferrer noopener">Semaphore On-Premise</a>. However, as we realized along the way, there are <a href="https://semaphore.io/blog/release-management-microservices" target="_blank" rel="noreferrer noopener">several challenges to overcome</a>. Consider the following before deciding to adopt microservices on-premise:</p>
<ul class="wp-block-list">
<li>Versioning rules for on-premise microservices are more stringent. You must track each individual microservice that participates in a release.</li>
<li>You must carry out thorough integration and end-to-end testing, as you can’t test in production.</li>
<li>Troubleshooting a microservice application is substantially more difficult without direct access to the production environment.</li>
</ul>
<h2 class="wp-block-heading" class="wp-block-heading" id="your-monolith-might-have-life-left">Your monolith might have life left</h2>
<p class="wp-block-paragraph">Every piece of software has a lifecycle. You might be tempted to scrap a monolith because it’s old and has its share of complications. But tossing a working product is wasteful. With a little effort, you might be able to squeeze a few more good years out of your current system.</p>
<p class="wp-block-paragraph">There are two moments when it might seem that microservices are the only way forward:</p>
<ul class="wp-block-list">
<li><strong>Tangled codebase</strong>: it’s hard to make changes and add features without breaking other functionality.</li>
</ul>
<p class="wp-block-paragraph"><strong>Performance</strong>: you’re having trouble scaling the monolith.</p>
<h3 class="wp-block-heading" class="wp-block-heading" id="modularizing-the-monolith">Modularizing the monolith</h3>
<p class="wp-block-paragraph">A common reason developers want to avoid monoliths is their proclivity to deteriorate into a tangle of code. It’s challenging to add new features when we get to this point since everything is interconnected.</p>
<p class="wp-block-paragraph">But a monolith does not have to be a mess. Take the example of Shopify: with over 3 million lines of code, theirs is one of the largest Rails monoliths in the world. At one point, the system grew so large it <a href="https://shopify.engineering/deconstructing-monolith-designing-software-maximizes-developer-productivity" target="_blank" rel="noreferrer noopener">caused much grief to developers</a>:</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">The application was extremely fragile with new code having unexpected repercussions. Making a seemingly innocuous change could trigger a cascade of unrelated test failures. For example, if the code that calculates our shipping rate is called into the code that calculates tax rates, then making changes to how we calculate tax rates could affect the outcome of shipping rate calculations, but it might not be obvious why. This was a result of high coupling and a lack of boundaries, which also resulted in tests that were difficult to write, and very slow to run on CI.</p>
</blockquote>
<p class="wp-block-paragraph">Instead of rewriting their entire monolith as microservices, <a href="https://shopify.engineering/shopify-monolith" target="_blank" rel="noreferrer noopener">Shopify chose modularization</a> as the solution.</p>
<p class="wp-block-paragraph">​</p>
<figure class="wp-block-image aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="730" height="522" src="https://semaphore.io/wp-content/uploads/2022/07/module-vs-units.jpg" alt="Diagram showing two axes. The vertical axis reads the level of modularization. The horizontal axis reads the number of deployable units. Four quadrants are shown. Near the zero on both axes sits a layered monolith. Upwards on the vertical axis, there is a modularized monolith. On the far right and top sit microservices. On the bottom right, there is a distributed monolith." class="wp-image-19485" style="width:730px;height:522px"/><figcaption class="wp-element-caption">Modularization helps design better monoliths and microservices. Without carefully defined modules, we either fall into the traditional layered monolith (the big ball of mud) or, even worse, as a distributed monolith, which combines the worst features of monoliths and microservices.</figcaption></figure>
<p class="wp-block-paragraph">​</p>
<p class="wp-block-paragraph">Modularization is a lot of work, that’s true. But it also adds a ton of value because it makes development more straightforward. New developers do not have to know the whole application before they can start making changes. They only need to be familiar with one module at a time. Modularity makes a large monolith feel small.</p>
<p class="wp-block-paragraph">Modularization is a required step before transitioning to microservices, and it may be a better solution than microservices. The modular monolith, like in microservices, solves the tangled codebase problem by splitting the code into independent modules. Unlike with microservices, where communication happens over a network, the modules in the monolith communicate over internal API calls.</p>
<p class="wp-block-paragraph">​</p>
<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1056" height="723" src="https://semaphore.io/wp-content/uploads/2022/07/layered-vs-modular-1-1056x723.jpg" alt="Layered vs modularized monolith. The left picture shows a classic MVC layered monolith. On the right side, it has been modularized. Instead of layers, we have vertical blocks representing the Accounts, Orders, and Products modules." class="wp-image-19486" srcset="https://semaphore.io/wp-content/uploads/2022/07/layered-vs-modular-1-1056x723.jpg 1056w, https://semaphore.io/wp-content/uploads/2022/07/layered-vs-modular-1-784x537.jpg 784w, https://semaphore.io/wp-content/uploads/2022/07/layered-vs-modular-1-768x526.jpg 768w, https://semaphore.io/wp-content/uploads/2022/07/layered-vs-modular-1.jpg 1087w" sizes="auto, (max-width: 1056px) 100vw, 1056px" /><figcaption class="wp-element-caption">Layered vs modular monoliths. Modularized monoliths share many of the characteristics of microservice architecture sans the most difficult challenges.</figcaption></figure>
<p class="wp-block-paragraph">​</p>
<h3 class="wp-block-heading" class="wp-block-heading" id="monoliths-can-scale">Monoliths can scale</h3>
<p class="wp-block-paragraph">Another misconception about monoliths is that they can’t scale. If you’re experiencing performance issues and think that microservices are the only way out, think again. Shopify has shown us that sound engineering can make a monolith on work on a mind-boggling scale:</p>
<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">2021 was our biggest Black Friday Cyber Monday ever! Together with our friends at <a href="https://twitter.com/googlecloud?ref_src=twsrc%5Etfw">@GoogleCloud</a> we achieved near-perfect uptime while averaging ~30TB/min of egress traffic across our infrastructure. That’s a massive ~43PB/day!<br><br>Here are some of the most interesting stats 🧵👇</p>&mdash; Shopify Engineering (@ShopifyEng) <a href="https://twitter.com/ShopifyEng/status/1465806691543531525?ref_src=twsrc%5Etfw">November 30, 2021</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div></figure>
<p class="wp-block-paragraph">The architecture and technology stack will determine how the monolith can be optimized; a process that almost invariably will start with modularization and can leverage cloud technologies for scaling:</p>
<ul class="wp-block-list">
<li>Deploying multiple instances of the monolith and using load balancing to distribute the traffic.</li>
<li>Distributing static assets and frontend code using CDNs.</li>
<li>Using caching to reduce the load on the database.</li>
<li>Implementing high-demand features with edge computing or serverless functions.</li>
</ul>
<h2 class="wp-block-heading" class="wp-block-heading" id="if-its-working-dont-fix-it">If it’s working, don’t fix it</h2>
<p class="wp-block-paragraph">If we measure productivity as the number of value-adding features implemented over time, then it follows that switching architecture makes little sense while productivity is strong.</p>
<p class="wp-block-paragraph">​</p>
<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="868" height="468" src="https://semaphore.io/wp-content/uploads/2022/07/productivity.jpg" alt="A two-axis diagram showing two lines, one for monolith and the other for microservices. The X axis is time, and the Y axis is productivity. Initially, the monolith is more productive than microservices. Over time, monolith productivity decreases faster than a monolith, making the lines cross at some middle point. On the right side, microservices are more productive." class="wp-image-19487" srcset="https://semaphore.io/wp-content/uploads/2022/07/productivity.jpg 868w, https://semaphore.io/wp-content/uploads/2022/07/productivity-784x423.jpg 784w, https://semaphore.io/wp-content/uploads/2022/07/productivity-768x414.jpg 768w" sizes="auto, (max-width: 868px) 100vw, 868px" /><figcaption class="wp-element-caption">Microservices are initially the less productive architecture due to maintenance overhead. As the monolith grows, it gets more complex, and it’s harder to add new features. Microservice only pays off after the lines cross.</figcaption></figure>
<p class="wp-block-paragraph">​</p>
<p class="wp-block-paragraph">True, something will have to change eventually. But that could be years from now, and by then, requirements may have changed — and who knows what new architecture models may emerge in the meantime?</p>
<h2 class="wp-block-heading" class="wp-block-heading" id="brookes-law-and-developer-productivity">Brooke’s Law and developer productivity</h2>
<p class="wp-block-paragraph">In <a href="https://semaphore.io/blog/books-every-senior-engineer-should-read#month" target="_blank" rel="noreferrer noopener"><em>The Mythical Man Month</em></a> (1975), Fred Brook Jr stated that “adding manpower to a late software project makes it later”. This happens because new developers must be mentored before they can work on a complex codebase. Also, as the team grows, the communication overhead increases. It’s harder to get organized and make decisions.</p>
<p class="wp-block-paragraph">​</p>
<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="629" height="408" src="https://semaphore.io/wp-content/uploads/2022/07/brooke.jpg" alt="A two-axis diagram is shown. The vertical axis is time, and the horizontal axis is the number of developers. The curve starts high on time, and as the number of developers increases, the curve goes down, making the project take less time to complete. At some point, the tendency changes, and the curve increases exponentially. The more people that are added, the longer the project takes. The inflection point is the optimal team size." class="wp-image-19488"/><figcaption class="wp-element-caption">Brook’s law applied to complex software development states that adding more developers to a late software project only makes it take longer.</figcaption></figure>
<p class="wp-block-paragraph">​</p>
<p class="wp-block-paragraph">Microservices are one method of reducing the impact of Brooke’s Law. However, this effect is only visible in complicated and huge codebases where everything is interconnected, because we cannot divide development into discrete tasks in such a scenario.</p>
<p class="wp-block-paragraph">Before deciding on using microservices, you must determine if Brooke’s Law is affecting your monolith. Switching to microservices too soon would not add much value.</p>
<h2 class="wp-block-heading" class="wp-block-heading" id="are-you-ready-to-transition">Are you ready to transition?</h2>
<p class="wp-block-paragraph">Some conditions must be met before you can begin working with microservices. Along with <a href="https://semaphore.io/blog/monolith-microservices" target="_blank" rel="noreferrer noopener">preparing your monolith</a>, you’ll need to:</p>
<ul class="wp-block-list">
<li>Set up <a href="https://semaphore.io/cicd">continuous integration and continuous delivery</a> for automatic deployment.</li>
<li>Implement quick provisioning to build infrastructure on demand.</li>
<li>Learn about cloud-native tech stacks, including containers, Kubernetes, and serverless.</li>
<li>Get acquainted with <a href="https://semaphore.io/blog/domain-driven-design-microservices" target="_blank" rel="noreferrer noopener">Domain-Driven Design</a>, <a href="https://semaphore.io/blog/test-driven-development" target="_blank" rel="noreferrer noopener">Test-Driven Development</a>, and <a href="https://semaphore.io/community/tutorials/behavior-driven-development" target="_blank" rel="noreferrer noopener">Behavior-Driven Development</a>.</li>
<li>Reorganize the teams to be <a href="https://kanbanize.com/blog/cross-functional-teams/" target="_blank" rel="noreferrer noopener">cross-functional</a>, removing silos and flattening hierarchies to allow for innovation.</li>
<li>Foster a DevOps culture in which the lines between developer and operations jobs are blurred.</li>
</ul>
<p class="wp-block-paragraph">Changing the culture of an organization can take years. Learning all that there is to know will take months. Without preparation, transitioning to microservices is unlikely to succeed.</p>
<h2 class="wp-block-heading" class="wp-block-heading" id="conclusion">Conclusion</h2>
<p class="wp-block-paragraph">We can summarize this whole discussion about transitioning to microservices in one sentence: don’t do it unless you have a good reason. Companies that embark on the journey to microservices unprepared and without a solid design will have a very tough time of it. You need to achieve a critical mass of engineering culture and scaling know-how before microservices should be considered as an option.</p>
<p class="wp-block-paragraph">In the meantime, why change if your system is performing well and you’re still developing features at a decent pace?</p>
<p class="wp-block-paragraph">Thanks for reading, and happy coding!</p>
<div class="discord-discuss-cta" style="margin-top:2rem;padding:1rem 1.25rem;border:1px solid var(--wp--preset--color--contrast-3, #e5e7eb);border-radius:12px;">
<p style="margin:0;font-size:1rem;line-height:1.6;">
Want to discuss this article?
<a href="https://discord.semaphore.io/" rel="nofollow noopener" target="_blank" style="text-decoration:underline;">Join our Discord</a>.
</p>
</div>
</div><!-- .entry-content -->
<div class="author-wrap-bottom">
<div class="f-author-wrap">
<div class="image">
<img alt='mm' src='https://semaphore.io/wp-content/uploads/2020/10/tfernandez.jpeg' class='avatar avatar-80 photo' height='80' width='80' /> </div>
<div class="info">
<div class="rev-info f-fourteen">Writen by:</div>
<div class="name f-twenty-six">
<a href="https://semaphore.io/blog?blog_author=tfernandez&#038;blog_author_name=Tomas%20Fernandez#blog-list">Tomas Fernandez</a>
<div class="social-links">
<div class="author-twitter">
<a href="https://twitter.com/TomFernBlog" rel="nofollow" class="twitter-link" target="_blank" aria-label="Tomas Fernandez on X">
<svg width="22" height="19" viewBox="0 0 22 19" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
<path d="M16.5544 0H19.7775L12.7358 8.04821L21.0198 19H14.5335L9.45323 12.3578L3.6402 19H0.415077L7.94687 10.3915L0 0H6.65097L11.2431 6.07123L16.5544 0ZM15.4231 17.0708H17.2091L5.68051 1.8279H3.76395L15.4231 17.0708Z" fill="#202B30"/>
</svg>
</a>
</div>
<div class="author-linkedIn">
<a href="https://www.linkedin.com/in/pablo-tomas-fernandez-b6077514/" rel="nofollow" class="linkedin-link" target="_blank" aria-label="Tomas Fernandez on LinkedIn">
<svg width="20" height="19" viewBox="0 0 20 19" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.4459 0.000386938H1.54992C1.1479 -0.00747404 0.75906 0.139491 0.468555 0.409094C0.17805 0.678697 0.00956422 1.04896 0 1.43879V17.5602C0.00929283 17.9502 0.17766 18.3207 0.468194 18.5905C0.758729 18.8604 1.14773 19.0075 1.54992 18.9996H18.4459C18.8488 19.0086 19.2389 18.8619 19.5303 18.592C19.8218 18.3221 19.9907 17.9509 20 17.5602V1.43879C19.9904 1.04825 19.8214 0.67736 19.53 0.407642C19.2386 0.137923 18.8486 -0.00855892 18.4459 0.000386938ZM7.00068 14.2521H4.9987V7.59846H7.00068V14.2521ZM5.99448 6.64794C5.80212 6.64476 5.61501 6.58657 5.45661 6.48068C5.29821 6.37479 5.17558 6.2259 5.10408 6.05269C5.03259 5.87947 5.01542 5.68965 5.05473 5.50701C5.09404 5.32438 5.18807 5.15706 5.32504 5.02604C5.46201 4.89502 5.63582 4.80614 5.82467 4.77053C6.01353 4.73492 6.20902 4.75417 6.38663 4.82587C6.56425 4.89757 6.71608 5.01853 6.82309 5.17358C6.93011 5.32862 6.98753 5.51086 6.98818 5.69743C6.98825 5.82221 6.96258 5.94575 6.91267 6.06076C6.86276 6.17578 6.78962 6.27995 6.69757 6.36713C6.50934 6.54545 6.25657 6.64517 5.99344 6.64491L5.99448 6.64794ZM15.0003 14.2521H12.9993V10.45C12.9993 9.64192 12.7056 9.00454 11.5411 9.00454C10.3547 9.00454 10.0068 9.53889 10.0068 10.45V14.2521H8.00062V7.59846H10.0016L10.0786 8.22271H10.1109C10.3702 7.90784 10.7131 7.66745 11.1027 7.52739C11.4924 7.38732 11.914 7.35288 12.3223 7.42775C12.7077 7.43397 13.0874 7.51878 13.4368 7.67668C13.7862 7.83458 14.0974 8.06203 14.3502 8.34424C14.603 8.62644 14.7917 8.95708 14.9041 9.31466C15.0164 9.67224 15.0499 10.0488 15.0023 10.4197V14.2521H15.0003Z" fill="#202B30"/>
</svg>
</a>
</div>
</div>
</div>
<div class="author-description f-twenty">I picked up most of my skills during the years I worked at IBM. Was a DBA, developer, and cloud engineer for a time. After that, I went into freelancing, where I found the passion for writing. Now, I'm a full-time writer at Semaphore.</div>
</div>
</div>
<div class="f-author-wrap">
<div class="image">
<img alt='Avatar for Dan Ackerson' title='Gravatar for Dan Ackerson' src='https://secure.gravatar.com/avatar/432e1657f908a36388b30a1ccbc1045960bdfd796ab92a625a6fd82dc99e1468?s=80&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/432e1657f908a36388b30a1ccbc1045960bdfd796ab92a625a6fd82dc99e1468?s=160&#038;d=mm&#038;r=g 2x' class='avatar avatar-80 photo' height='80' width='80' loading='lazy' decoding='async'/> </div>
<div class="info">
<div class="rev-info f-fourteen">Reviewed by:</div>
<div class="name f-twenty-six">
<a href="https://semaphore.io/blog?blog_author=dan-ackerson&#038;blog_author_name=Dan%20Ackerson#blog-list">Dan Ackerson</a>
<div class="social-links">
<div class="author-twitter">
<a href="https://twitter.com/danackerson" rel="nofollow" class="twitter-link" target="_blank" aria-label="Dan Ackerson on X">
<svg width="22" height="19" viewBox="0 0 22 19" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
<path d="M16.5544 0H19.7775L12.7358 8.04821L21.0198 19H14.5335L9.45323 12.3578L3.6402 19H0.415077L7.94687 10.3915L0 0H6.65097L11.2431 6.07123L16.5544 0ZM15.4231 17.0708H17.2091L5.68051 1.8279H3.76395L15.4231 17.0708Z" fill="#202B30"/>
</svg>
</a>
</div>
<div class="author-linkedIn">
<a href="https://www.linkedin.com/in/danackerson/" rel="nofollow" class="linkedin-link" target="_blank" aria-label="Dan Ackerson on LinkedIn">
<svg width="20" height="19" viewBox="0 0 20 19" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.4459 0.000386938H1.54992C1.1479 -0.00747404 0.75906 0.139491 0.468555 0.409094C0.17805 0.678697 0.00956422 1.04896 0 1.43879V17.5602C0.00929283 17.9502 0.17766 18.3207 0.468194 18.5905C0.758729 18.8604 1.14773 19.0075 1.54992 18.9996H18.4459C18.8488 19.0086 19.2389 18.8619 19.5303 18.592C19.8218 18.3221 19.9907 17.9509 20 17.5602V1.43879C19.9904 1.04825 19.8214 0.67736 19.53 0.407642C19.2386 0.137923 18.8486 -0.00855892 18.4459 0.000386938ZM7.00068 14.2521H4.9987V7.59846H7.00068V14.2521ZM5.99448 6.64794C5.80212 6.64476 5.61501 6.58657 5.45661 6.48068C5.29821 6.37479 5.17558 6.2259 5.10408 6.05269C5.03259 5.87947 5.01542 5.68965 5.05473 5.50701C5.09404 5.32438 5.18807 5.15706 5.32504 5.02604C5.46201 4.89502 5.63582 4.80614 5.82467 4.77053C6.01353 4.73492 6.20902 4.75417 6.38663 4.82587C6.56425 4.89757 6.71608 5.01853 6.82309 5.17358C6.93011 5.32862 6.98753 5.51086 6.98818 5.69743C6.98825 5.82221 6.96258 5.94575 6.91267 6.06076C6.86276 6.17578 6.78962 6.27995 6.69757 6.36713C6.50934 6.54545 6.25657 6.64517 5.99344 6.64491L5.99448 6.64794ZM15.0003 14.2521H12.9993V10.45C12.9993 9.64192 12.7056 9.00454 11.5411 9.00454C10.3547 9.00454 10.0068 9.53889 10.0068 10.45V14.2521H8.00062V7.59846H10.0016L10.0786 8.22271H10.1109C10.3702 7.90784 10.7131 7.66745 11.1027 7.52739C11.4924 7.38732 11.914 7.35288 12.3223 7.42775C12.7077 7.43397 13.0874 7.51878 13.4368 7.67668C13.7862 7.83458 14.0974 8.06203 14.3502 8.34424C14.603 8.62644 14.7917 8.95708 14.9041 9.31466C15.0164 9.67224 15.0499 10.0488 15.0023 10.4197V14.2521H15.0003Z" fill="#202B30"/>
</svg>
</a>
</div>
</div>
</div>
<div class="author-description f-twenty">I picked up most of my soft/hardware troubleshooting skills in the US Army.
A decade of Java development drove me to operations, scaling infrastructure
to cope with the thundering herd. Engineering coach and CTO of Teleclinic.</div>
</div>
</div>
</div>
</div><!-- .single-blog-main-column -->
<div id="blog-sidebar" class="sidebar">
<div class="blog-sidebar-inner">
<form class="blog-sidebar-search" method="get" action="https://semaphore.io/blog#blog-list">
<label class="blog-sidebar-search-field" for="blog-sidebar-search-field">
<span class="screen-reader-text">Search blog</span>
<svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
<path d="M5.98535 0.5C9.01436 0.50019 11.4696 2.95593 11.4697 5.98535C11.4697 9.01487 9.01443 11.4705 5.98535 11.4707C2.95611 11.4707 0.5 9.01499 0.5 5.98535C0.500115 2.95581 2.95619 0.5 5.98535 0.5Z" stroke="#676D78"/>
<path d="M5.985 10.9706C8.73814 10.9706 10.97 8.73861 10.97 5.9853C10.97 3.232 8.73814 1 5.985 1C3.23186 1 1 3.232 1 5.9853C1 8.73861 3.23186 10.9706 5.985 10.9706Z" stroke="#676D78" stroke-width="2"/>
<path d="M9.83047 10.2315L14.9082 15.3105" stroke="#676D78" stroke-width="2" stroke-linecap="round"/>
</svg>
<input type="search" name="blog_search" id="blog-sidebar-search-field" value="" placeholder="Search blog" />
</label>
<button class="search-submit screen-reader-text" type="submit">Search</button>
</form>
<div class="toc">
<div class="wrap">
<div id="toctrigger" class="title">On this page</div>
<div class="navtoc"></div>
</div>
</div>
<div class="subscribe-sidebar">
<h3>CI/CD Weekly</h3>
<p>Get practical CI/CD + AI insights to help you you ship reliable software faster.</p>
<div class="wpcf7 no-js" id="wpcf7-f20434-p19483-o2" lang="en-US" dir="ltr" data-wpcf7-id="20434">
<div class="screen-reader-response"><p role="status" aria-live="polite" aria-atomic="true"></p> <ul></ul></div>
<form action="/blog/bad-microservices#wpcf7-f20434-p19483-o2" method="post" class="wpcf7-form init" aria-label="Contact form" novalidate="novalidate" data-status="init">
<fieldset class="hidden-fields-container"><input type="hidden" name="_wpcf7" value="20434" /><input type="hidden" name="_wpcf7_version" value="6.1.7" /><input type="hidden" name="_wpcf7_locale" value="en_US" /><input type="hidden" name="_wpcf7_unit_tag" value="wpcf7-f20434-p19483-o2" /><input type="hidden" name="_wpcf7_container_post" value="19483" /><input type="hidden" name="_wpcf7_posted_data_hash" value="" />
</fieldset>
<div class="mc4wp-form-fields"><span class="wpcf7-form-control-wrap" data-name="your-email"><input size="40" maxlength="400" class="wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email" aria-required="true" aria-invalid="false" placeholder="Your email" value="" type="email" name="your-email" /></span><input class="wpcf7-form-control wpcf7-submit has-spinner" type="submit" value="Subscribe" /><span id="wpcf7-6aa4e2428399b-wrapper" class="wpcf7-form-control-wrap cf7apps-honeypot-wrap mail-wrap" data-cf7apps-honeypot="mail" style="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;"><input type="hidden" name="mail-random-hash" value="20260912"><input type="hidden" name="mail-time-token" value="MTc4OTE5MDcyMg==.e115f02544635093e3d726f54ccae01fdd742d0272a9ab2fde8cac1f389352e4"><label
for="wpcf7-6aa4e2428399b-field"
class="hp-message"
>Please leave this field empty.</label><input
id="wpcf7-6aa4e2428399b-field"
class="wpcf7-form-control wpcf7-text"
type="text"
name="txuliewii6rp"
value=""
autocomplete="new-password"
tabindex="1000"
data-cf7apps-tabindex="1000"
/></span></div>
<style>
.wpcf7-form.sent .mc4wp-form-fields
{
display:none!important;
}
</style><p style="display: none !important;" class="akismet-fields-container" data-prefix="_wpcf7_ak_"><label>&#916;<textarea name="_wpcf7_ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_2" name="_wpcf7_ak_js" value="13"/><script>
document.getElementById( "ak_js_2" ).setAttribute( "value", ( new Date() ).getTime() );
</script>
</p><div class="wpcf7-response-output" aria-hidden="true"></div>
</form>
</div>
</div>
</div>
</div>
</div><!-- .single-inner-wrap -->
<!-- .entry-footer -->
</article><!-- #post-19483 -->
<div class="prev-next" >
<span class="prev">
<a href="https://semaphore.io/blog/restructure-organization-microservice-applications" rel="next">Next post</a> </span>
<span class="next">
<a href="https://semaphore.io/blog/test-microservices" rel="prev">Previous post</a> </span>
</div>
</main><!-- #main -->
<div class="footer-subs subscribe-blog-footer">
<div style="height:100px" aria-hidden="true" class="wp-block-spacer is-style-spacer-medium"></div>
<div id="block-23">
<div class="wp-block-group is-layout-constrained wp-container-core-group-is-layout-e74abb89 wp-block-group-is-layout-constrained">
<div class="wp-block-group alignfull is-style-default has-background is-layout-constrained wp-container-core-group-is-layout-f8bdc706 wp-block-group-is-layout-constrained" style="background-color:#2865de;padding-top:8%;padding-right:8%;padding-bottom:8%;padding-left:8%">
<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-e6f5fef2 wp-block-columns-is-layout-flex" style="margin-bottom:0px">
<div class="wp-block-column is-vertically-aligned-top is-layout-flow wp-block-column-is-layout-flow">
<h4 class="wp-block-heading has-text-color has-link-color has-jetbrains-font-family has-font-down-3-font-size wp-elements-11" style="color:#ffffff9e;margin-top:0px;margin-bottom:10px">Subscribe to weekly newsletter on</h4>
<h2 class="wp-block-heading is-style-no-margin has-v-8-white-color has-text-color has-link-color has-font-up-6-font-size wp-elements-12">AI-driven CI/CD</h2>
</div>
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow">
<div class="wp-block-contact-form-7-contact-form-selector is-style-v8-transparent-black">
<div class="wpcf7 no-js" id="wpcf7-f20434-o3" lang="en-US" dir="ltr" data-wpcf7-id="20434">
<div class="screen-reader-response"><p role="status" aria-live="polite" aria-atomic="true"></p> <ul></ul></div>
<form action="/blog/bad-microservices#wpcf7-f20434-o3" method="post" class="wpcf7-form init" aria-label="Contact form" novalidate="novalidate" data-status="init">
<fieldset class="hidden-fields-container"><input type="hidden" name="_wpcf7" value="20434" /><input type="hidden" name="_wpcf7_version" value="6.1.7" /><input type="hidden" name="_wpcf7_locale" value="en_US" /><input type="hidden" name="_wpcf7_unit_tag" value="wpcf7-f20434-o3" /><input type="hidden" name="_wpcf7_container_post" value="0" /><input type="hidden" name="_wpcf7_posted_data_hash" value="" />
</fieldset>
<div class="mc4wp-form-fields"><span class="wpcf7-form-control-wrap" data-name="your-email"><input size="40" maxlength="400" class="wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email" aria-required="true" aria-invalid="false" placeholder="Your email" value="" type="email" name="your-email" /></span><input class="wpcf7-form-control wpcf7-submit has-spinner" type="submit" value="Subscribe" /><span id="wpcf7-6aa4e24284e23-wrapper" class="wpcf7-form-control-wrap cf7apps-honeypot-wrap mail-wrap" data-cf7apps-honeypot="mail" style="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;"><input type="hidden" name="mail-random-hash" value="20260912"><input type="hidden" name="mail-time-token" value="MTc4OTE5MDcyMg==.e115f02544635093e3d726f54ccae01fdd742d0272a9ab2fde8cac1f389352e4"><label
for="wpcf7-6aa4e24284e23-field"
class="hp-message"
>Please leave this field empty.</label><input
id="wpcf7-6aa4e24284e23-field"
class="wpcf7-form-control wpcf7-text"
type="text"
name="txuliewii6rp"
value=""
autocomplete="new-password"
tabindex="1000"
data-cf7apps-tabindex="1000"
/></span></div>
<style>
.wpcf7-form.sent .mc4wp-form-fields
{
display:none!important;
}
</style><p style="display: none !important;" class="akismet-fields-container" data-prefix="_wpcf7_ak_"><label>&#916;<textarea name="_wpcf7_ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_3" name="_wpcf7_ak_js" value="122"/><script>
document.getElementById( "ak_js_3" ).setAttribute( "value", ( new Date() ).getTime() );
</script>
</p><div class="wpcf7-response-output" aria-hidden="true"></div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div> </div>
</div><!-- #primary -->
</div><!-- #content -->
<!-- V8 footer-->
<div class="starus"><span>Star us on GitHub</span>
<div class="github">
<div class="github-star-count">
<a class="repo" target="_blank" href="https://github.com/semaphoreio/semaphore/"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.97846 0C5.10528 0.0238765 3.31817 0.791925 2.00976 2.1354C0.701349 3.47888 -0.0213357 5.2879 0.000479939 7.165C-0.00507392 8.65342 0.448463 10.1072 1.29903 11.3274C2.1496 12.5476 3.35565 13.4747 4.75215 13.9817C4.80682 13.9978 4.86447 14.001 4.92056 13.9909C4.97665 13.9809 5.02964 13.9579 5.07533 13.9238C5.12103 13.8897 5.15819 13.8454 5.18388 13.7944C5.20956 13.7434 5.22307 13.6872 5.22333 13.6301V12.4014C3.29608 12.8409 2.86876 11.4338 2.86876 11.4338C2.75257 10.9981 2.47778 10.6217 2.09853 10.3789C1.45655 9.93937 2.14106 9.93937 2.14106 9.93937C2.36418 9.97497 2.57636 10.0607 2.76167 10.1903C2.94698 10.3198 3.10061 10.4897 3.21102 10.6872C3.30015 10.8626 3.42362 11.0181 3.57406 11.1446C3.72451 11.2711 3.89883 11.3659 4.08664 11.4234C4.27445 11.4809 4.4719 11.4999 4.66719 11.4793C4.86249 11.4586 5.05163 11.3987 5.22333 11.3032C5.24802 10.9403 5.39956 10.5977 5.65132 10.3356C4.11018 10.1618 2.48331 9.54313 2.48331 6.77209C2.46636 6.05595 2.72749 5.36117 3.21168 4.83416C3.01916 4.22921 3.04863 3.57524 3.29475 2.99014C3.29475 2.99014 3.89286 2.81432 5.222 3.738C5.79253 3.57593 6.38435 3.50183 6.97713 3.51824C7.56866 3.52366 8.15759 3.5974 8.73226 3.738C10.0614 2.81432 10.6595 2.99014 10.6595 2.99014C10.9049 3.5918 10.9352 4.25996 10.7452 4.88145C11.2194 5.41372 11.4799 6.10322 11.4763 6.81671C11.4763 9.58708 9.8494 10.1591 8.30826 10.3349C8.47573 10.5087 8.60436 10.7163 8.6856 10.9437C8.76684 11.1712 8.79883 11.4134 8.77944 11.6542V13.6334C8.77971 13.6905 8.79321 13.7468 8.8189 13.7977C8.84458 13.8487 8.88174 13.893 8.92744 13.9271C8.97314 13.9612 9.02613 13.9842 9.08222 13.9942C9.13831 14.0043 9.19596 14.0011 9.25062 13.985C10.6519 13.4847 11.8626 12.5588 12.7138 11.3363C13.5651 10.1138 14.0146 8.65562 13.9996 7.165C14.0046 5.2855 13.2705 3.47969 11.9564 2.13863C10.6422 0.797582 8.85384 0.0292405 6.97846 0Z" fill="#0D1421"/></svg>Star
</a>
<a class="count" target="_blank" href="https://github.com/semaphoreio/semaphore/stargazers"><div class="github-star-counter">...</div></a>
</div>
</div>
<div class="close"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
<mask id="mask0_2249_425" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="20" height="20">
<rect width="20" height="20" fill="#D9D9D9"/>
</mask>
<g mask="url(#mask0_2249_425)">
<path d="M6.0625 15L5 13.9375L8.9375 10L5 6.0625L6.0625 5L10 8.9375L13.9375 5L15 6.0625L11.0625 10L15 13.9375L13.9375 15L10 11.0625L6.0625 15Z" fill="#838B9C"/>
</g>
</svg></div>
<script>
// 1) If the user has NOT closed it this session, show it
if (sessionStorage.getItem('starusClosed') !== 'true') {
document.querySelector('.starus').style.display = 'flex';
}
// 2) On close click, hide and remember
const closeBtn = document.querySelector('.starus .close');
if (closeBtn) {
closeBtn.addEventListener('click', function() {
document.querySelector('.starus').style.display = 'none';
sessionStorage.setItem('starusClosed', 'true');
});
}
</script>
</div>
<footer id="colophon" class="site-footer v8 ">
<div class="wrap">
<div id="block-26">
<div style="height:6vw" aria-hidden="true" class="wp-block-spacer"></div>
</div><div id="block-16">
<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-content-justification-left is-layout-constrained wp-container-core-column-is-layout-f6ee7863 wp-block-column-is-layout-constrained" style="flex-basis:30%">
<p class="has-v-8-white-color has-text-color has-link-color has-font-up-2-font-size wp-elements-13 wp-block-paragraph" style="margin-top:20px;margin-bottom:10px;font-style:normal;font-weight:700">CI built for coding agents - fast, affordable, and enterprise-ready.</p>
<p class="is-style-arrow-link has-v-8-blue-color has-text-color has-link-color has-font-down-2-font-size wp-elements-14 wp-block-paragraph" style="margin-top:0px;font-style:normal;font-weight:700"><a href="https://semaphore.io/about" data-type="link" data-id="https://semaphore.io/about">About</a> <img loading="lazy" decoding="async" width="13" height="12" class="wp-image-25606" style="width: 13px;" src="https://semaphore.io/wp-content/uploads/2025/01/arrow-white.svg" alt=""></p>
<div class="wp-block-group links is-nowrap is-layout-flex wp-container-core-group-is-layout-c1b47ee0 wp-block-group-is-layout-flex" style="margin-top:40px">
<figure class="wp-block-image size-full is-style-vertical-alignmiddle"><a href="https://github.com/semaphoreio" target="_blank" rel=" noreferrer noopener"><img loading="lazy" decoding="async" width="20" height="20" src="https://semaphore.io/wp-content/uploads/2025/02/github.svg" alt="" class="wp-image-25751"/></a></figure>
<figure class="wp-block-image size-full is-style-vertical-alignmiddle"><a href="https://x.com/semaphoreci" target="_blank" rel=" noreferrer noopener"><img loading="lazy" decoding="async" width="20" height="19" src="https://semaphore.io/wp-content/uploads/2025/02/x.svg" alt="" class="wp-image-25748"/></a></figure>
<figure class="wp-block-image size-full is-style-vertical-alignmiddle"><a href="https://www.youtube.com/c/SemaphoreCI" target="_blank" rel=" noreferrer noopener"><img loading="lazy" decoding="async" width="20" height="15" src="https://semaphore.io/wp-content/uploads/2025/02/youtube.svg" alt="" class="wp-image-25749"/></a></figure>
<figure class="wp-block-image size-full is-style-vertical-alignmiddle"><a href="https://discord.semaphore.io/" target="_blank" rel=" noreferrer noopener"><img loading="lazy" decoding="async" width="20" height="20" src="https://semaphore.io/wp-content/uploads/2025/02/discord.svg" alt="" class="wp-image-25750"/></a></figure>
<figure class="wp-block-image size-full is-style-vertical-alignmiddle"><a href="https://www.linkedin.com/company/semaphoreci" target="_blank" rel=" noreferrer noopener"><img loading="lazy" decoding="async" width="20" height="20" src="https://semaphore.io/wp-content/uploads/2025/02/linkedin.svg" alt="" class="wp-image-25752"/></a></figure>
</div>
</div>
<div class="wp-block-column halfsizeonmobile is-layout-flow wp-block-column-is-layout-flow">
<h2 class="wp-block-heading has-v-8-white-color has-text-color has-link-color has-font-down-2-font-size wp-elements-15" style="margin-top:0px;margin-bottom:20px;font-style:normal;font-weight:700">Resources</h2>
<p class="is-style-no-link-underline has-link-color has-font-down-2-font-size wp-elements-16 wp-block-paragraph" style="margin-top:8px;margin-bottom:8px"><a href="https://semaphore.io/hiring">We're hiring</a> <img decoding="async" draggable="false" role="img" class="emoji" src="https://s.w.org/images/core/emoji/15.0.3/svg/1f91d-1f3fd.svg" alt="🤝🏽"></p>
<p class="is-style-no-link-underline has-link-color has-font-down-2-font-size wp-elements-17 wp-block-paragraph" style="margin-top:8px;margin-bottom:8px"><a href="https://semaphore.io/blog">Blog</a></p>
<p class="is-style-no-link-underline has-link-color has-font-down-2-font-size wp-elements-18 wp-block-paragraph" style="margin-top:8px;margin-bottom:8px"><a href="https://semaphore.io/podcast">Podcast</a> <img decoding="async" draggable="false" role="img" class="emoji" src="https://s.w.org/images/core/emoji/15.0.3/svg/1f399.svg" alt="🎙️"></p>
<p class="is-style-no-link-underline has-link-color has-font-down-2-font-size wp-elements-19 wp-block-paragraph" style="margin-top:8px;margin-bottom:8px"><a href="https://www.youtube.com/c/SemaphoreCI">Youtube</a> <img decoding="async" draggable="false" role="img" class="emoji" src="https://s.w.org/images/core/emoji/16.0.1/svg/1f3a5.svg" alt="🎥"></p>
<p class="is-style-no-link-underline has-link-color has-font-down-2-font-size wp-elements-20 wp-block-paragraph" style="margin-top:8px;margin-bottom:8px"><a href="https://semaphore.io/resources">Resources</a></p>
<p class="is-style-no-link-underline has-link-color has-font-down-2-font-size wp-elements-21 wp-block-paragraph" style="margin-top:8px;margin-bottom:8px"><a href="https://semaphore.io/newsletter">Newsletter</a></p>
</div>
<div class="wp-block-column halfsizeonmobile is-layout-flow wp-block-column-is-layout-flow">
<h2 class="wp-block-heading has-v-8-white-color has-text-color has-link-color has-font-down-2-font-size wp-elements-22" style="margin-top:0px;margin-bottom:20px;font-style:normal;font-weight:700">Product</h2>
<p class="is-style-no-link-underline has-link-color has-font-down-2-font-size wp-elements-23 wp-block-paragraph" style="margin-top:8px;margin-bottom:8px"><a href="https://semaphore.io/semaphore-ci-cd-benchmark-performance-and-cost-analysis">Benchmark</a></p>
<p class="is-style-no-link-underline has-link-color has-font-down-2-font-size wp-elements-24 wp-block-paragraph" style="margin-top:8px;margin-bottom:8px"><a href="https://semaphore.io/pricing">Pricing</a> <img decoding="async" draggable="false" role="img" class="emoji" src="https://s.w.org/images/core/emoji/15.0.3/svg/1f4b0.svg" alt="💰"></p>
<p class="is-style-no-link-underline has-link-color has-font-down-2-font-size wp-elements-25 wp-block-paragraph" style="margin-top:8px;margin-bottom:8px"><a href="https://docs.semaphore.io/">Docs</a></p>
<p class="is-style-no-link-underline has-link-color has-font-down-2-font-size wp-elements-26 wp-block-paragraph" style="margin-top:8px;margin-bottom:8px"><a href="https://semaphore.io/customers">Customers</a></p>
<p class="is-style-no-link-underline has-link-color has-font-down-2-font-size wp-elements-27 wp-block-paragraph" style="margin-top:8px;margin-bottom:8px"><a href="https://status.semaphore.io/">System Status</a></p>
<p class="is-style-no-link-underline has-link-color has-font-down-2-font-size wp-elements-28 wp-block-paragraph" style="margin-top:8px;margin-bottom:8px"><a href="https://semaphore.io/security">Security</a></p>
</div>
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:30%">
<div class="wp-block-contact-form-7-contact-form-selector is-style-v8-transparent">
<div class="wpcf7 no-js" id="wpcf7-f20434-o4" lang="en-US" dir="ltr" data-wpcf7-id="20434">
<div class="screen-reader-response"><p role="status" aria-live="polite" aria-atomic="true"></p> <ul></ul></div>
<form action="/blog/bad-microservices#wpcf7-f20434-o4" method="post" class="wpcf7-form init" aria-label="Contact form" novalidate="novalidate" data-status="init">
<fieldset class="hidden-fields-container"><input type="hidden" name="_wpcf7" value="20434" /><input type="hidden" name="_wpcf7_version" value="6.1.7" /><input type="hidden" name="_wpcf7_locale" value="en_US" /><input type="hidden" name="_wpcf7_unit_tag" value="wpcf7-f20434-o4" /><input type="hidden" name="_wpcf7_container_post" value="0" /><input type="hidden" name="_wpcf7_posted_data_hash" value="" />
</fieldset>
<div class="mc4wp-form-fields"><span class="wpcf7-form-control-wrap" data-name="your-email"><input size="40" maxlength="400" class="wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email" aria-required="true" aria-invalid="false" placeholder="Your email" value="" type="email" name="your-email" /></span><input class="wpcf7-form-control wpcf7-submit has-spinner" type="submit" value="Subscribe" /><span id="wpcf7-6aa4e24288fdd-wrapper" class="wpcf7-form-control-wrap cf7apps-honeypot-wrap mail-wrap" data-cf7apps-honeypot="mail" style="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;"><input type="hidden" name="mail-random-hash" value="20260912"><input type="hidden" name="mail-time-token" value="MTc4OTE5MDcyMg==.e115f02544635093e3d726f54ccae01fdd742d0272a9ab2fde8cac1f389352e4"><label
for="wpcf7-6aa4e24288fdd-field"
class="hp-message"
>Please leave this field empty.</label><input
id="wpcf7-6aa4e24288fdd-field"
class="wpcf7-form-control wpcf7-text"
type="text"
name="txuliewii6rp"
value=""
autocomplete="new-password"
tabindex="1000"
data-cf7apps-tabindex="1000"
/></span></div>
<style>
.wpcf7-form.sent .mc4wp-form-fields
{
display:none!important;
}
</style><p style="display: none !important;" class="akismet-fields-container" data-prefix="_wpcf7_ak_"><label>&#916;<textarea name="_wpcf7_ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_4" name="_wpcf7_ak_js" value="69"/><script>
document.getElementById( "ak_js_4" ).setAttribute( "value", ( new Date() ).getTime() );
</script>
</p><div class="wpcf7-response-output" aria-hidden="true"></div>
</form>
</div>
</div>
<p class="is-style-no-link-underline has-text-color has-link-color has-font-down-4-font-size wp-elements-29 wp-block-paragraph" style="color:#838b9c;margin-top:8px;margin-bottom:8px">By clicking "Subscribe" you agree that your personal data will be processed in accordance with our <a href="https://semaphore.io/privacy">Privacy policy</a>.</p>
<div class="wp-block-group is-content-justification-right is-nowrap is-layout-flex wp-container-core-group-is-layout-12181dce wp-block-group-is-layout-flex">
<figure class="wp-block-image size-large" style="margin-top:7px"><img loading="lazy" decoding="async" width="89" height="84" src="https://semaphore.io/wp-content/uploads/2025/09/linux-silver-member.svg" alt="" class="wp-image-26991"/></figure>
<figure class="wp-block-image size-full is-resized" style="margin-top:7px"><img loading="lazy" decoding="async" width="76" height="88" src="https://semaphore.io/wp-content/uploads/2026/05/AutomationTesting_BestEstimatedROI_Mid-Market_Roi-2.svg" alt="" class="wp-image-27604" style="width:76px;height:auto"/></figure>
<figure class="wp-block-image size-full is-resized" style="margin-top:7px"><img loading="lazy" decoding="async" width="76" height="88" src="https://semaphore.io/wp-content/uploads/2026/05/ContinuousDelivery_HighPerformer_Mid-Market_Europe_HighPerformer-1.svg" alt="" class="wp-image-27605" style="width:76px;height:auto"/></figure>
<figure class="wp-block-image size-full is-resized" style="margin-top:7px"><img loading="lazy" decoding="async" width="76" height="88" src="https://semaphore.io/wp-content/uploads/2026/05/DevOps_UsersMostLikelyToRecommend_Enterprise_Nps-1.svg" alt="" class="wp-image-27606" style="width:76px;height:auto"/></figure>
</div>
<div class="wp-block-group is-content-justification-right is-nowrap is-layout-flex wp-container-core-group-is-layout-12181dce wp-block-group-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="87" height="87" src="https://semaphore.io/wp-content/uploads/2025/02/aicpa-soc.svg" alt="" class="wp-image-25755"/></figure>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="87" height="87" src="https://semaphore.io/wp-content/uploads/2025/02/iso-27001.svg" alt="" class="wp-image-25754"/></figure>
</div>
</div>
</div>
</div><div id="block-29"></div><div id="block-32"></div><div id="block-17">
<div style="height:6vw" aria-hidden="true" class="wp-block-spacer"></div>
</div><div id="block-18">
<div class="wp-block-group is-content-justification-space-between is-layout-flex wp-container-core-group-is-layout-bc62f25f wp-block-group-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="130" height="18" src="https://semaphore.io/wp-content/uploads/2025/02/footer-logo.svg" alt="" class="wp-image-25747"/></figure>
<div class="wp-block-group is-layout-flex wp-container-core-group-is-layout-ce4d7537 wp-block-group-is-layout-flex">
<p class="is-style-no-margin has-link-color has-font-down-3-font-size wp-elements-64 wp-block-paragraph"><a href="https://semaphore.io/tos">Terms of Service</a></p>
<p class="is-style-no-margin has-link-color has-font-down-3-font-size wp-elements-65 wp-block-paragraph"><a href="https://semaphore.io/privacy">Privacy Policy</a></p>
<p class="is-style-no-margin has-v-8-gray-color has-text-color has-link-color has-font-down-3-font-size wp-elements-66 wp-block-paragraph">© 2026 Semaphore Technologies doo. All rights reserved.</p>
</div>
</div>
</div><div id="block-28"></div><div id="block-33"></div><div id="block-38">
<div style="height:2vw" aria-hidden="true" class="wp-block-spacer"></div>
</div><div id="block-48"><style>
.site-footer .halfsizeonmobile a:active, .site-footer .halfsizeonmobile a:visited {
color: #98a2b5;
}
.site-footer .halfsizeonmobile a:hover {
color: #FFFFFF;
}
</style></div></div>
</footer>
</div><!-- #page -->
<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/semaphoreci_v8/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<script id="independent-analytics-script" >
// Do not change this comment line otherwise Speed Optimizer won't be able to detect this script
(function () {
function sendRequest(url, body) {
if(!window.fetch) {
const xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xhr.send(JSON.stringify(body))
return
}
const request = fetch(url, {
method: 'POST',
body: JSON.stringify(body),
keepalive: true,
headers: {
'Content-Type': 'application/json;charset=UTF-8'
}
});
}
const calculateParentDistance = (child, parent) => {
let count = 0;
let currentElement = child;
// Traverse up the DOM tree until we reach parent or the top of the DOM
while (currentElement && currentElement !== parent) {
currentElement = currentElement.parentNode;
count++;
}
// If parent was not found in the hierarchy, return -1
if (!currentElement) {
return -1; // Indicates parent is not an ancestor of element
}
return count; // Number of layers between element and parent
}
const isMatchingClass = (linkRule, href, classes, ids) => {
return classes.includes(linkRule.value)
}
const isMatchingId = (linkRule, href, classes, ids) => {
return ids.includes(linkRule.value)
}
const isMatchingDomain = (linkRule, href, classes, ids) => {
if(!URL.canParse(href)) {
return false
}
const url = new URL(href)
const host = url.host
const hostsToMatch = [host]
if(host.startsWith('www.')) {
hostsToMatch.push(host.substring(4))
} else {
hostsToMatch.push('www.' + host)
}
return hostsToMatch.includes(linkRule.value)
}
const isMatchingExtension = (linkRule, href, classes, ids) => {
if(!URL.canParse(href)) {
return false
}
const url = new URL(href)
return url.pathname.endsWith('.' + linkRule.value)
}
const isMatchingSubdirectory = (linkRule, href, classes, ids) => {
if(!URL.canParse(href)) {
return false
}
const url = new URL(href)
return url.pathname.startsWith('/' + linkRule.value + '/')
}
const isMatchingProtocol = (linkRule, href, classes, ids) => {
if(!URL.canParse(href)) {
return false
}
const url = new URL(href)
return url.protocol === linkRule.value + ':'
}
const isMatchingExternal = (linkRule, href, classes, ids) => {
if(!URL.canParse(href) || !URL.canParse(document.location.href)) {
return false
}
const matchingProtocols = ['http:', 'https:']
const siteUrl = new URL(document.location.href)
const linkUrl = new URL(href)
// Links to subdomains will appear to be external matches according to JavaScript,
// but the PHP rules will filter those events out.
return matchingProtocols.includes(linkUrl.protocol) && siteUrl.host !== linkUrl.host
}
const isMatch = (linkRule, href, classes, ids) => {
switch (linkRule.type) {
case 'class':
return isMatchingClass(linkRule, href, classes, ids)
case 'id':
return isMatchingId(linkRule, href, classes, ids)
case 'domain':
return isMatchingDomain(linkRule, href, classes, ids)
case 'extension':
return isMatchingExtension(linkRule, href, classes, ids)
case 'subdirectory':
return isMatchingSubdirectory(linkRule, href, classes, ids)
case 'protocol':
return isMatchingProtocol(linkRule, href, classes, ids)
case 'external':
return isMatchingExternal(linkRule, href, classes, ids)
default:
return false;
}
}
const track = (element) => {
const href = element.href ?? null
const classes = Array.from(element.classList)
const ids = [element.id]
const linkRules = [{"type":"extension","value":"pdf"},{"type":"extension","value":"zip"},{"type":"protocol","value":"mailto"},{"type":"protocol","value":"tel"}]
if(linkRules.length === 0) {
return
}
// For link rules that target an id, we need to allow that id to appear
// in any ancestor up to the 7th ancestor. This loop looks for those matches
// and counts them.
linkRules.forEach((linkRule) => {
if(linkRule.type !== 'id') {
return;
}
const matchingAncestor = element.closest('#' + linkRule.value)
if(!matchingAncestor || matchingAncestor.matches('html, body')) {
return;
}
const depth = calculateParentDistance(element, matchingAncestor)
if(depth < 7) {
ids.push(linkRule.value)
}
});
// For link rules that target a class, we need to allow that class to appear
// in any ancestor up to the 7th ancestor. This loop looks for those matches
// and counts them.
linkRules.forEach((linkRule) => {
if(linkRule.type !== 'class') {
return;
}
const matchingAncestor = element.closest('.' + linkRule.value)
if(!matchingAncestor || matchingAncestor.matches('html, body')) {
return;
}
const depth = calculateParentDistance(element, matchingAncestor)
if(depth < 7) {
classes.push(linkRule.value)
}
});
const hasMatch = linkRules.some((linkRule) => {
return isMatch(linkRule, href, classes, ids)
})
if(!hasMatch) {
return
}
const url = "https://semaphore.io/wp-content/plugins/independent-analytics/iawp-click-endpoint.php";
const siteId = "";
const body = {
href: href,
classes: classes.join(' '),
ids: ids.join(' '),
siteId: siteId,
...{"payload":{"resource":"singular","singular_id":19483,"page":1},"signature":"64784c16ad48e2ef1245fba254a4dcf1"} };
sendRequest(url, body)
}
let hasSearched = false;
function search() {
if(hasSearched) {
return;
}
hasSearched = true;
if (document.hasOwnProperty("visibilityState") && document.visibilityState === "prerender") {
return;
}
if (navigator.webdriver || /bot|crawler|spider|crawling|semrushbot|chrome-lighthouse/i.test(navigator.userAgent)) {
return;
}
let referrer_url = null;
if (typeof document.referrer === 'string' && document.referrer.length > 0) {
referrer_url = document.referrer;
}
const params = location.search.slice(1).split('&').reduce((acc, s) => {
const [k, v] = s.split('=');
return Object.assign(acc, {[k]: v});
}, {});
const url = "https://semaphore.io/wp-json/iawp/search";
const body = {
referrer_url,
utm_source: params.utm_source,
utm_medium: params.utm_medium,
utm_campaign: params.utm_campaign,
utm_term: params.utm_term,
utm_content: params.utm_content,
gclid: params.gclid,
...{"payload":{"resource":"singular","singular_id":19483,"page":1},"signature":"64784c16ad48e2ef1245fba254a4dcf1"} };
sendRequest(url, body)
}
document.addEventListener('mousedown', function (event) {
if (navigator.webdriver || /bot|crawler|spider|crawling|semrushbot|chrome-lighthouse/i.test(navigator.userAgent)) {
return;
}
const element = event.target.closest('a')
if(!element) {
return
}
const isPro = false
if(!isPro) {
return
}
// Don't track left clicks with this event. The click event is used for that.
if(event.button === 0) {
return
}
track(element)
})
document.addEventListener('click', function (event) {
if (navigator.webdriver || /bot|crawler|spider|crawling|semrushbot|chrome-lighthouse/i.test(navigator.userAgent)) {
return;
}
const element = event.target.closest('a, button, input[type="submit"], input[type="button"]')
if(!element) {
return
}
const isPro = false
if(!isPro) {
return
}
track(element)
})
document.addEventListener('play', function (event) {
if (navigator.webdriver || /bot|crawler|spider|crawling|semrushbot|chrome-lighthouse/i.test(navigator.userAgent)) {
return;
}
const element = event.target.closest('audio, video')
if(!element) {
return
}
const isPro = false
if(!isPro) {
return
}
track(element)
}, true)
document.addEventListener("DOMContentLoaded", function (e) {
search();
});
document.addEventListener("iawpSearch", function (e) {
search();
});
})();
</script>
<script type="text/javascript">
function fetch_search(){
var request = new XMLHttpRequest();
var datafetch = document.getElementById('datafetch');
request.open('POST', 'https://semaphore.io/wp-admin/admin-ajax.php', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
request.onload = function () {
if (this.status >= 200 && this.status < 400) {
datafetch.innerHTML= this.response;
} else {
console.log('nothing here');
}
};
request.onerror = function() {
console.log('onerror');
};
var data = document.getElementById('s').value;
request.send('action=data_fetch&keyword='+data);
}
</script>
<script id="wp-hooks-js" src="https://semaphore.io/wp-includes/js/dist/hooks.min.js?ver=f0f188028580e8dc1255"></script>
<script id="wp-i18n-js" src="https://semaphore.io/wp-includes/js/dist/i18n.min.js?ver=1dfe7db3940c23ea9216"></script>
<script id="wp-i18n-js-after">
wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } );
//# sourceURL=wp-i18n-js-after
</script>
<script id="swv-js" src="https://semaphore.io/wp-content/plugins/contact-form-7/includes/swv/js/index.js?ver=6.1.7"></script>
<script id="contact-form-7-js-before">
var wpcf7 = {
"api": {
"root": "https:\/\/semaphore.io\/wp-json\/",
"namespace": "contact-form-7\/v1"
}
};
//# sourceURL=contact-form-7-js-before
</script>
<script id="contact-form-7-js" src="https://semaphore.io/wp-content/plugins/contact-form-7/includes/js/index.js?ver=6.1.7"></script>
<script id="cf7apps-honeypot-refill-js-extra">
var cf7appsHoneypotRefill = {"forceRefillOnInit":""};
//# sourceURL=cf7apps-honeypot-refill-js-extra
</script>
<script id="cf7apps-honeypot-refill-js" src="https://semaphore.io/wp-content/plugins/contact-form-7-honeypot/legacy-honeypot/includes/js/honeypot-refill.js?ver=3.7.1"></script>
<script id="star-count-js-extra">
var MyPlugin = {"apiUrl":"https://semaphore.io/wp-json/myplugin/v1/star-count"};
//# sourceURL=star-count-js-extra
</script>
<script id="star-count-js" src="https://semaphore.io/wp-content/themes/semaphoreci_v8/js/star-count.js"></script>
<script id="wpcf7-redirect-script-js-extra">
var wpcf7r = {"ajax_url":"https://semaphore.io/wp-admin/admin-ajax.php"};
//# sourceURL=wpcf7-redirect-script-js-extra
</script>
<script id="wpcf7-redirect-script-js" src="https://semaphore.io/wp-content/plugins/wpcf7-redirect/build/assets/frontend-script.js?ver=2c532d7e2be36f6af233"></script>
<script id="youtube-playlist-embed-js-js-extra">
var youtubePlaylistEmbed = {"restUrl":"https://semaphore.io/wp-json/youtube-playlist/v1/","nonce":"d7c2fac0b2"};
//# sourceURL=youtube-playlist-embed-js-js-extra
</script>
<script id="youtube-playlist-embed-js-js" src="https://semaphore.io/wp-content/plugins/youtube-playlist-embed/assets/playlist.js?ver=1.2"></script>
<script id="youtube-playlist-block-js-js-extra">
var youtubePlaylistEmbed = {"restUrl":"https://semaphore.io/wp-json/youtube-playlist/v1/","nonce":"d7c2fac0b2"};
//# sourceURL=youtube-playlist-block-js-js-extra
</script>
<script id="youtube-playlist-block-js-js" src="https://semaphore.io/wp-content/plugins/youtube-playlist-embed/assets/playlist-block.js?ver=1.2"></script>
<script id="semaphoreci-scripts-js" src="https://semaphore.io/wp-content/themes/semaphoreci_v8/js/semaphore.js?ver=1785062831"></script>
<script id="semaphoreci-animated-group-background-js" src="https://semaphore.io/wp-content/themes/semaphoreci_v8/js/animated-group-background.js?ver=1785062832"></script>
<script id="semaphoreci-toc-js" src="https://semaphore.io/wp-content/themes/semaphoreci_v8/js/toc-dist.js?ver=1785062831"></script>
<script defer id="akismet-frontend-js" src="https://semaphore.io/wp-content/plugins/akismet/_inc/akismet-frontend.js?ver=1787922741"></script>
</body>
</html>