Files
nexus/sreweekly/articles/357/03-rundown-of-linkedin-s-sre-practices.html
2026-09-12 17:23:01 +08:00

1167 lines
92 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
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">
<meta name="robots" content="max-image-preview:large">
<title>Rundown of LinkedIn&#8217;s SRE practices &#8211; Boost software reliability | SREpath</title>
<link rel="alternate" type="application/rss+xml" title="Boost software reliability | SREpath &raquo; Feed" href="/feed/">
<link rel="alternate" type="application/rss+xml" title="Boost software reliability | SREpath &raquo; Comments Feed" href="/comments/feed/">
<script>
window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/svg\/","svgExt":".svg","source":{"concatemoji":"\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.5.5"}};
/*! This file is auto-generated */
!function(i,n){var o,s,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===r[t]})}function u(e,t,n){switch(t){case"flag":return n(e,"🏳️‍⚧️","🏳️​⚧️")?!1:!n(e,"🇺🇳","🇺​🇳")&&!n(e,"🏴󠁧󠁢󠁥󠁮󠁧󠁿","🏴​󠁧​󠁢​󠁥​󠁮​󠁧​󠁿");case"emoji":return!n(e,"🐦‍⬛","🐦​⬛")}return!1}function f(e,t,n){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement("canvas"),a=r.getContext("2d",{willReadFrequently:!0}),o=(a.textBaseline="top",a.font="600 32px Arial",{});return e.forEach(function(e){o[e]=t(a,e,n)}),o}function t(e){var t=i.createElement("script");t.src=e,t.defer=!0,i.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",s=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){i.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"}),a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=function(e){c(n=e.data),a.terminate(),t(n)})}catch(e){}c(n=f(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings);
</script>
<style id="wp-block-site-logo-inline-css">.wp-block-site-logo{box-sizing:border-box;line-height:0}.wp-block-site-logo a{display:inline-block;line-height:0}.wp-block-site-logo.is-default-size img{height:auto;width:120px}.wp-block-site-logo img{height:auto;max-width:100%}.wp-block-site-logo a,.wp-block-site-logo img{border-radius:inherit}.wp-block-site-logo.aligncenter{margin-left:auto;margin-right:auto;text-align:center}.wp-block-site-logo.is-style-rounded{border-radius:9999px}</style>
<style id="wp-block-navigation-link-inline-css">.wp-block-navigation .wp-block-navigation-item__label{overflow-wrap:break-word}.wp-block-navigation .wp-block-navigation-item__description{display:none}.link-ui-tools{border-top:1px solid #f0f0f0;padding:8px}.link-ui-block-inserter{padding-top:8px}.link-ui-block-inserter__back{margin-left:8px;text-transform:uppercase}.components-popover-pointer-events-trap{background-color:initial;cursor:pointer;inset:0;position:fixed;z-index:1000000}</style>
<link rel="stylesheet" id="wp-block-navigation-css" href="/wp-includes/blocks/navigation/style.min.css?ver=6.5.5" media="all">
<link rel="stylesheet" id="ollie-block-core-navigation-css" href="/wp-content/themes/ollie/assets/styles/core-navigation.css?ver=6.5.5" media="all">
<style id="wp-block-group-inline-css">.wp-block-group{box-sizing:border-box}</style>
<style id="ideabox-toc-style-inline-css">html{scroll-behavior:auto !important}.ib-toc-container .ib-toc-icon-collapse,.ib-toc-container .ib-toc-icon-expand{display:none;height:20px;line-height:1}.ib-toc-container .ib-toc-icon-collapse svg,.ib-toc-container .ib-toc-icon-expand svg{fill:var(--fill)}.ib-toc-container.ib-toc-expanded .ib-toc-icon-collapse{display:inline}.ib-toc-container.ib-toc-collapsed .ib-toc-icon-expand{display:inline}.ib-toc-container .ib-toc-header{padding:10px 20px;display:flex;flex-direction:row;justify-content:space-between;align-items:center;cursor:pointer}.ib-toc-container .ib-toc-header .ib-toc-header-right{display:flex}.ib-toc-container .ib-toc-body{padding:20px}.ib-toc-container .ib-toc-separator{height:1px;background-color:#333}.ib-toc-container .ib-toc-anchors{margin:0;padding:0}.ib-toc-container .ib-toc-anchors ul,.ib-toc-container .ib-toc-anchors ol{padding-left:45px}.ib-toc-container .ib-toc-anchors li{margin-top:var(--listSpacing)}.ib-toc-container .ib-toc-anchors>li:first-of-type{margin-top:0}.ib-toc-container .ib-toc-anchors a{color:var(--linkColor)}.ib-toc-container ol{list-style:none !important;counter-reset:item}.ib-toc-container ol li{counter-increment:item}.ib-toc-container ol li:before{content:counters(item, ".") " ";display:inline-block;margin-right:.5em;text-align:right}.ib-toc-container ol.ib-toc-anchors>li:before{content:counters(item, ".") ". "}</style>
<style id="wp-block-post-terms-inline-css">.wp-block-post-terms{box-sizing:border-box}.wp-block-post-terms .wp-block-post-terms__separator{white-space:pre-wrap}</style>
<style id="ollie-block-core-post-terms-inline-css">/* Categories
--------------------------------------------- */
.is-style-term-button a {
padding: 6px 12px;
border-radius: 5px;
background-color: var(--wp--preset--color--tertiary);
font-size: var(--wp--preset--font-size--x-small);
color: var(--wp--preset--color--primary);
line-height: 1.4;
}
.single .taxonomy-post_tag.is-style-term-button {
display: flex;
gap: var(--wp--preset--spacing--small);
}
.single .taxonomy-post_tag.is-style-term-button .wp-block-post-terms__separator {
display: none;
}
.single .post-meta:empty {
display: none;
}</style>
<style id="wp-block-post-title-inline-css">.wp-block-post-title{box-sizing:border-box;word-break:break-word}.wp-block-post-title a{display:inline-block}</style>
<style id="wp-block-post-author-inline-css">.wp-block-post-author{display:flex;flex-wrap:wrap}.wp-block-post-author__byline{font-size:.5em;margin-bottom:0;margin-top:0;width:100%}.wp-block-post-author__avatar{margin-right:1em}.wp-block-post-author__bio{font-size:.7em;margin-bottom:.7em}.wp-block-post-author__content{flex-basis:0;flex-grow:1}.wp-block-post-author__name{margin:0}</style>
<style id="ollie-block-core-post-author-inline-css">/* Post Author
--------------------------------------------- */
.wp-block-post-author {
align-items: center;
}
.wp-block-post-author__name {
margin-bottom: 0;
}
.wp-block-post-author__avatar {
display: inline-flex;
align-items: center;
margin-right: .8rem;
}
.wp-block-post-author__avatar img {
width: 26px;
height: 26px;
border-radius: 100px;
}</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}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}</style>
<style id="ollie-block-core-paragraph-inline-css">/* Paragraph
--------------------------------------------- */
p.has-background {
padding: var(--wp--preset--spacing--small);
}</style>
<style id="wp-block-post-date-inline-css">.wp-block-post-date{box-sizing:border-box}</style>
<style id="wp-block-post-featured-image-inline-css">.wp-block-post-featured-image{margin-left:0;margin-right:0}.wp-block-post-featured-image a{display:block;height:100%}.wp-block-post-featured-image img{box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom;width:100%}.wp-block-post-featured-image.alignfull img,.wp-block-post-featured-image.alignwide img{width:100%}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim{background-color:#000;inset:0;position:absolute}.wp-block-post-featured-image{position:relative}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-gradient{background-color:initial}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-0{opacity:0}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-10{opacity:.1}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-20{opacity:.2}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-30{opacity:.3}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-40{opacity:.4}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-50{opacity:.5}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-60{opacity:.6}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-70{opacity:.7}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-80{opacity:.8}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-90{opacity:.9}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-100{opacity:1}.wp-block-post-featured-image:where(.alignleft,.alignright){width:100%}</style>
<style id="wp-block-spacer-inline-css">.wp-block-spacer{clear:both}</style>
<style id="wp-block-heading-inline-css">h1.has-background,h2.has-background,h3.has-background,h4.has-background,h5.has-background,h6.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}</style>
<style id="wp-block-list-inline-css">ol,ul{box-sizing:border-box}ol.has-background,ul.has-background{padding:1.25em 2.375em}</style>
<style id="ollie-block-core-list-inline-css">/* List
--------------------------------------------- */
/* List styles for default unordered lists */
.entry-content ul li,
.entry-content ol li,
.wp-block-post-content ul li,
.wp-block-post-content ol li {
margin-bottom: var(--wp--preset--spacing--small);
}
/* .entry-content > ul li,
.entry-content > ol li,
.wp-block-post-content > ul li,
.wp-block-post-content > ol li {
margin-bottom: var(--wp--preset--spacing--small);
} */
.entry-content ul ul,
.entry-content ol ul,
.wp-block-post-content ul ul,
.wp-block-post-content ol ul {
margin-top: var(--wp--preset--spacing--small);
}
/* Remove paddings */
.entry-content :not(.wp-block-group) > li:first-child {
padding-top: 0;
}
.entry-content :not(.wp-block-group) li:last-child {
padding-bottom: 0;
}
ul.is-style-list-check,
ul.is-style-list-check ul,
ul.is-style-list-check-circle,
ul.is-style-list-check-circle ul {
padding-inline-start: 0px !important;
padding-left: 0;
list-style: none;
}
.entry-content ul.is-style-list-check,
.entry-content ul.is-style-list-check-circle {
padding-inline-start: .5rem;
}
ul.is-style-list-check li,
ul.is-style-list-check-circle li {
position: relative;
padding-left: calc(var(--wp--preset--spacing--medium) + .5rem);
}
ul.is-style-list-check li:before,
ul.is-style-list-check-circle li:before {
font-family: 'Dashicons';
content: "\f147";
position: absolute;
left: 0;
}
ul.is-style-list-check-circle li:before {
content: "\f12a";
}
ul.is-style-list-check-circle li {
padding-left: calc(var(--wp--preset--spacing--medium) + .5rem);
}
/* Boxed list style */
ul.is-style-list-boxed,
ul.is-style-list-boxed.wp-block {
background: var(--wp--preset--color--tertiary);
padding: var(--wp--preset--spacing--medium) var(--wp--preset--spacing--large);
border-radius: 5px;
}
ul.is-style-list-boxed li:last-child {
margin-bottom: 0;
}</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}</style>
<style id="ollie-block-core-quote-inline-css">/* Quote
--------------------------------------------- */
.wp-block-quote.has-text-align-center,
.wp-block-quote.has-text-align-left,
.wp-block-quote.has-text-align-right {
padding: var(--wp--preset--spacing--large);
}
.wp-block-quote p:last-of-type {
margin-bottom: var(--wp--preset--spacing--small);
}
.wp-block-quote cite,
.wp-block-pullquote cite {
display: block;
}</style>
<link rel="stylesheet" id="wp-block-table-css" href="/wp-includes/blocks/table/style.min.css?ver=6.5.5" media="all">
<style id="ollie-block-core-table-inline-css">/* Table
--------------------------------------------- */
.wp-block-table.is-style-stripes tbody tr:nth-child(odd) {
background-color: var(--wp--preset--color--tertiary);
}</style>
<style id="wp-block-columns-inline-css">.wp-block-columns{align-items:normal!important;box-sizing:border-box;display:flex;flex-wrap:wrap!important}@media (min-width:782px){.wp-block-columns{flex-wrap:nowrap!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%}</style>
<style id="ollie-block-core-columns-inline-css">/* Column
--------------------------------------------- */
.is-style-column-box-shadow {
box-shadow: 0px 8px 40px -20px rgb(21 14 41 / 12%);
transition: .4s ease;
}
.is-style-column-box-shadow:hover {
box-shadow: 0px 12px 60px -20px rgb(21 14 41 / 16%);
}
.wp-block-column {
border-radius: 5px;
}</style>
<style id="wp-block-comments-inline-css">.wp-block-post-comments{box-sizing:border-box}.wp-block-post-comments .alignleft{float:left}.wp-block-post-comments .alignright{float:right}.wp-block-post-comments .navigation:after{clear:both;content:"";display:table}.wp-block-post-comments .commentlist{clear:both;list-style:none;margin:0;padding:0}.wp-block-post-comments .commentlist .comment{min-height:2.25em;padding-left:3.25em}.wp-block-post-comments .commentlist .comment p{font-size:1em;line-height:1.8;margin:1em 0}.wp-block-post-comments .commentlist .children{list-style:none;margin:0;padding:0}.wp-block-post-comments .comment-author{line-height:1.5}.wp-block-post-comments .comment-author .avatar{border-radius:1.5em;display:block;float:left;height:2.5em;margin-right:.75em;margin-top:.5em;width:2.5em}.wp-block-post-comments .comment-author cite{font-style:normal}.wp-block-post-comments .comment-meta{font-size:.875em;line-height:1.5}.wp-block-post-comments .comment-meta b{font-weight:400}.wp-block-post-comments .comment-meta .comment-awaiting-moderation{display:block;margin-bottom:1em;margin-top:1em}.wp-block-post-comments .comment-body .commentmetadata{font-size:.875em}.wp-block-post-comments .comment-form-author label,.wp-block-post-comments .comment-form-comment label,.wp-block-post-comments .comment-form-email label,.wp-block-post-comments .comment-form-url label{display:block;margin-bottom:.25em}.wp-block-post-comments .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments .comment-form textarea{box-sizing:border-box;display:block;width:100%}.wp-block-post-comments .comment-form-cookies-consent{display:flex;gap:.25em}.wp-block-post-comments .comment-form-cookies-consent #wp-comment-cookies-consent{margin-top:.35em}.wp-block-post-comments .comment-reply-title{margin-bottom:0}.wp-block-post-comments .comment-reply-title :where(small){font-size:var(--wp--preset--font-size--medium,smaller);margin-left:.5em}.wp-block-post-comments .reply{font-size:.875em;margin-bottom:1.4em}.wp-block-post-comments input:not([type=submit]),.wp-block-post-comments textarea{border:1px solid #949494;font-family:inherit;font-size:1em}.wp-block-post-comments input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments textarea{padding:calc(.667em + 2px)}:where(.wp-block-post-comments input[type=submit]){border:none}</style>
<style id="ollie-block-core-comments-inline-css">/* Comments
--------------------------------------------- */
.wp-block-post-comments .commentlist {
margin-bottom: 40px;
margin-top: 40px;
}
.wp-block-comment-template ol {
padding-inline-start: var(--wp--preset--spacing--medium) !important;
}
.wp-block-comment-template > li {
margin-left: 0;
}
.wp-block-post-comments .form-submit {
margin-bottom: 0;
}
.comment-form-cookies-consent {
font-size: var(--wp--preset--font-size--small);
}
.comment .avatar {
margin-top: 8px;
}
.wp-block-comment-template + .wp-block-post-comments-form {
margin-top: var(--wp--preset--spacing--large);
}
.wp-block-comments .wp-block-group:empty {
display: none;
}
.wp-block-comments .wp-block-group:empty + .comment-respond {
margin-top: 0;
}
.wp-block-comments-pagination-numbers > * {
margin: 0 4px;
}
/* Comment Author Avatar
--------------------------------------------- */
.wp-block-post-comments .comment-author .avatar {
height: 48px;
margin-top: 2px;
width: 48px;
}</style>
<link rel="stylesheet" id="wp-block-social-links-css" href="/wp-includes/blocks/social-links/style.min.css?ver=6.5.5" media="all">
<style id="wp-block-separator-inline-css">@charset "UTF-8";.wp-block-separator{border:none;border-top:2px solid}.wp-block-separator.is-style-dots{background:none!important;border:none;height:auto;line-height:1;text-align:center}.wp-block-separator.is-style-dots:before{color:currentColor;content:"···";font-family:serif;font-size:1.5em;letter-spacing:2em;padding-left:2em}</style>
<style id="ollie-block-core-separator-inline-css">/* Separator
--------------------------------------------- */
.wp-block-separator {
opacity: 1;
}
.wp-block-separator:not(.is-style-dots),
.wp-block-separator.has-background:not(.is-style-dots) {
border-bottom: 1px solid currentColor;
height: 1px;
}
.wp-block-separator.is-style-dots::before {
font-family: sans-serif;
font-size: var(--wp--preset--font-size--large);
letter-spacing: 10px;
padding-left: 10px;
}
hr.is-style-separator-dotted,
.editor-styles-wrapper hr.is-style-separator-dotted {
width: 100% !important;
height: 1px !important;
border: none !important;
height: 1px !important;
background-color: none !important;
background: currentColor !important;
background: repeating-linear-gradient(90deg,currentColor,currentColor 2px,transparent 2px,transparent 5px) !important;
}
.is-style-separator-thin {
border: none !important;
}</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;
}</style>
<link rel="stylesheet" id="wp-block-library-css" href="/wp-includes/css/dist/block-library/common.min.css?ver=6.5.5" media="all">
<link rel="stylesheet" id="dashicons-css" href="/wp-includes/css/dashicons.min.css?ver=6.5.5" media="all">
<style id="global-styles-inline-css">body{--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--primary: #4d34fa;--wp--preset--color--main: #14111f;--wp--preset--color--secondary: #636381;--wp--preset--color--main-accent: #d0ccde;--wp--preset--color--primary-accent: #e4e1fe;--wp--preset--color--tertiary: #f6f6fc;--wp--preset--color--base: #fff;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 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,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 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--gradient--purple: linear-gradient(135deg, #4D34FA, #ad34fa);--wp--preset--gradient--blue: linear-gradient(135deg, #0057FF, #31B5FF);--wp--preset--gradient--pink: linear-gradient(135deg, #FF007A, #FF81BD);--wp--preset--gradient--black: linear-gradient(135deg, #14111E, #4B4462);--wp--preset--gradient--heat: linear-gradient(135deg, #F32758, #FFC581);--wp--preset--font-size--small: clamp(1rem, 1rem + ((1vw - 0.2rem) * 0.34), 1.2rem);--wp--preset--font-size--medium: clamp(1.3rem, 1.3rem + ((1vw - 0.2rem) * 0.511), 1.6rem);--wp--preset--font-size--large: clamp(1.5rem, 1.5rem + ((1vw - 0.2rem) * 0.851), 2rem);--wp--preset--font-size--x-large: clamp(2rem, 2rem + ((1vw - 0.2rem) * 1.362), 2.8rem);--wp--preset--font-size--x-small: clamp(.9rem, 0.9rem + ((1vw - 0.2rem) * 0.17), 1rem);--wp--preset--font-size--base: clamp(1.13rem, 1.13rem + ((1vw - 0.2rem) * 0.289), 1.3rem);--wp--preset--font-size--xx-large: clamp(2.6rem, 2.6rem + ((1vw - 0.2rem) * 1.957), 3.75rem);--wp--preset--font-size--xxx-large: clamp(3rem, 3rem + ((1vw - 0.2rem) * 3.064), 4.8rem);--wp--preset--font-family--primary: Inter, sans-serif;--wp--preset--font-family--monospace: 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--spacing--small: clamp(.5rem, 2.5vw, 1rem);--wp--preset--spacing--medium: clamp(1.5rem, 4vw, 2rem);--wp--preset--spacing--large: clamp(2rem, 5vw, 3rem);--wp--preset--spacing--x-large: clamp(3rem, 7vw, 5rem);--wp--preset--spacing--xx-large: clamp(4rem, 9vw, 7rem);--wp--preset--spacing--xxx-large: clamp(5rem, 12vw, 9rem);--wp--preset--spacing--xxxx-large: clamp(6rem, 14vw, 13rem);--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 rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);--wp--custom--font-weight--thin: 100;--wp--custom--font-weight--extra-light: 200;--wp--custom--font-weight--light: 300;--wp--custom--font-weight--regular: 400;--wp--custom--font-weight--medium: 500;--wp--custom--font-weight--semi-bold: 600;--wp--custom--font-weight--bold: 700;--wp--custom--font-weight--extra-bold: 800;--wp--custom--font-weight--black: 900;--wp--custom--line-height--none: 1;--wp--custom--line-height--tight: 1.1;--wp--custom--line-height--snug: 1.2;--wp--custom--line-height--normal: 1.5;--wp--custom--line-height--relaxed: 1.625;--wp--custom--line-height--loose: 2;--wp--custom--line-height--body: calc(1px + 2ex + 7px);}body { margin: 0;--wp--style--global--content-size: 740px;--wp--style--global--wide-size: 1260px; }.wp-site-blocks { padding-top: var(--wp--style--root--padding-top); padding-bottom: var(--wp--style--root--padding-bottom); }.has-global-padding { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }.has-global-padding :where(.has-global-padding:not(.wp-block-block)) { padding-right: 0; padding-left: 0; }.has-global-padding > .alignfull { margin-right: calc(var(--wp--style--root--padding-right) * -1); margin-left: calc(var(--wp--style--root--padding-left) * -1); }.has-global-padding :where(.has-global-padding:not(.wp-block-block)) > .alignfull { margin-right: 0; margin-left: 0; }.has-global-padding > .alignfull:where(:not(.has-global-padding):not(.is-layout-flex):not(.is-layout-grid)) > :where([class*="wp-block-"]:not(.alignfull):not([class*="__"]),p,h1,h2,h3,h4,h5,h6,ul,ol) { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }.has-global-padding :where(.has-global-padding) > .alignfull:where(:not(.has-global-padding)) > :where([class*="wp-block-"]:not(.alignfull):not([class*="__"]),p,h1,h2,h3,h4,h5,h6,ul,ol) { padding-right: 0; padding-left: 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: var(--wp--preset--spacing--medium); margin-block-end: 0; }:where(.wp-site-blocks) > :first-child:first-child { margin-block-start: 0; }:where(.wp-site-blocks) > :last-child:last-child { margin-block-end: 0; }body { --wp--style--block-gap: var(--wp--preset--spacing--medium); }:where(body .is-layout-flow) > :first-child:first-child{margin-block-start: 0;}:where(body .is-layout-flow) > :last-child:last-child{margin-block-end: 0;}:where(body .is-layout-flow) > *{margin-block-start: var(--wp--preset--spacing--medium);margin-block-end: 0;}:where(body .is-layout-constrained) > :first-child:first-child{margin-block-start: 0;}:where(body .is-layout-constrained) > :last-child:last-child{margin-block-end: 0;}:where(body .is-layout-constrained) > *{margin-block-start: var(--wp--preset--spacing--medium);margin-block-end: 0;}:where(body .is-layout-flex) {gap: var(--wp--preset--spacing--medium);}:where(body .is-layout-grid) {gap: var(--wp--preset--spacing--medium);}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .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;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}body{background-color: var(--wp--preset--color--base);color: var(--wp--preset--color--main);font-family: var(--wp--preset--font-family--primary);font-size: var(--wp--preset--font-size--medium);font-weight: var(--wp--custom--font-weight--regular);line-height: var(--wp--custom--line-height--body);--wp--style--root--padding-top: 0;--wp--style--root--padding-right: var(--wp--preset--spacing--medium);--wp--style--root--padding-bottom: 0;--wp--style--root--padding-left: var(--wp--preset--spacing--medium);}a:where(:not(.wp-element-button)){color: var(--wp--preset--color--main);text-decoration: underline;}h1, h2, h3, h4, h5, h6{font-family: var(--wp--preset--font-family--primary);font-weight: var(--wp--custom--font-weight--medium);line-height: var(--wp--custom--line-height--body);}h1{font-size: var(--wp--preset--font-size--xx-large);}h2{font-size: var(--wp--preset--font-size--x-large);}h3{font-size: var(--wp--preset--font-size--large);}h4{font-size: var(--wp--preset--font-size--medium);}h5{font-size: var(--wp--preset--font-size--base);}h6{font-size: var(--wp--preset--font-size--small);}.wp-element-button, .wp-block-button__link{background-color: var(--wp--preset--color--primary);border-radius: 5px;border-width: 0;color: var(--wp--preset--color--base);font-family: inherit;font-size: var(--wp--preset--font-size--small);font-weight: var(--wp--custom--font-weight--medium);line-height: inherit;padding-top: .5em;padding-right: 1em;padding-bottom: .5em;padding-left: 1em;text-decoration: none;}.wp-element-button:hover, .wp-block-button__link:hover{background-color: var(--wp--preset--color--primary);color: var(--wp--preset--color--base);text-decoration: underline;}.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-primary-color{color: var(--wp--preset--color--primary) !important;}.has-main-color{color: var(--wp--preset--color--main) !important;}.has-secondary-color{color: var(--wp--preset--color--secondary) !important;}.has-main-accent-color{color: var(--wp--preset--color--main-accent) !important;}.has-primary-accent-color{color: var(--wp--preset--color--primary-accent) !important;}.has-tertiary-color{color: var(--wp--preset--color--tertiary) !important;}.has-base-color{color: var(--wp--preset--color--base) !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-primary-background-color{background-color: var(--wp--preset--color--primary) !important;}.has-main-background-color{background-color: var(--wp--preset--color--main) !important;}.has-secondary-background-color{background-color: var(--wp--preset--color--secondary) !important;}.has-main-accent-background-color{background-color: var(--wp--preset--color--main-accent) !important;}.has-primary-accent-background-color{background-color: var(--wp--preset--color--primary-accent) !important;}.has-tertiary-background-color{background-color: var(--wp--preset--color--tertiary) !important;}.has-base-background-color{background-color: var(--wp--preset--color--base) !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-primary-border-color{border-color: var(--wp--preset--color--primary) !important;}.has-main-border-color{border-color: var(--wp--preset--color--main) !important;}.has-secondary-border-color{border-color: var(--wp--preset--color--secondary) !important;}.has-main-accent-border-color{border-color: var(--wp--preset--color--main-accent) !important;}.has-primary-accent-border-color{border-color: var(--wp--preset--color--primary-accent) !important;}.has-tertiary-border-color{border-color: var(--wp--preset--color--tertiary) !important;}.has-base-border-color{border-color: var(--wp--preset--color--base) !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-purple-gradient-background{background: var(--wp--preset--gradient--purple) !important;}.has-blue-gradient-background{background: var(--wp--preset--gradient--blue) !important;}.has-pink-gradient-background{background: var(--wp--preset--gradient--pink) !important;}.has-black-gradient-background{background: var(--wp--preset--gradient--black) !important;}.has-heat-gradient-background{background: var(--wp--preset--gradient--heat) !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-x-small-font-size{font-size: var(--wp--preset--font-size--x-small) !important;}.has-base-font-size{font-size: var(--wp--preset--font-size--base) !important;}.has-xx-large-font-size{font-size: var(--wp--preset--font-size--xx-large) !important;}.has-xxx-large-font-size{font-size: var(--wp--preset--font-size--xxx-large) !important;}.has-primary-font-family{font-family: var(--wp--preset--font-family--primary) !important;}.has-monospace-font-family{font-family: var(--wp--preset--font-family--monospace) !important;}
.wp-block-navigation{font-weight: var(--wp--custom--font-weight--medium);}
.wp-block-navigation a:where(:not(.wp-element-button)){color: var(--wp--preset--color--primary-accent);text-decoration: none;}
.wp-block-navigation a:where(:not(.wp-element-button)):hover{color: var(--wp--preset--color--base);text-decoration: underline;}
.wp-block-navigation a:where(:not(.wp-element-button)):focus{color: var(--wp--preset--color--base);text-decoration: none;}
.wp-block-navigation a:where(:not(.wp-element-button)):active{color: var(--wp--preset--color--base);text-decoration: none;}
.wp-block-columns{margin-bottom: 0px;}
p{line-height: var(--wp--custom--line-height--body);}
.wp-block-post-terms a:where(:not(.wp-element-button)){text-decoration: none;}
.wp-block-post-title{font-size: var(--wp--preset--font-size--xx-large);line-height: var(--wp--custom--line-height--body);}
.wp-block-post-title a:where(:not(.wp-element-button)){text-decoration: none;}
.wp-block-post-title a:where(:not(.wp-element-button)):hover{text-decoration: underline;}
.wp-block-quote{border-radius: 0;border-color: var(--wp--preset--color--primary);border-width: 0 0 0 5px !important;border-style: solid;font-size: var(--wp--preset--font-size--medium);font-weight: var(--wp--custom--font-weight--medium);line-height: var(--wp--custom--line-height--normal);padding-right: var(--wp--preset--spacing--large);padding-left: var(--wp--preset--spacing--large);}
.wp-block-quote cite{color: var(--wp--preset--color--secondary);font-size: var(--wp--preset--font-size--small);margin-top: 10px;}
.wp-block-spacer{margin-top: 0 !important;}
.wp-block-separator{color: var(--wp--preset--color--main);font-size: var(--wp--preset--font-size--large);}
.wp-block-table > table{font-size: var(--wp--preset--font-size--small);}
.wp-block-template-part{margin-top: 0px !important;}
.sticky-sidebar {
position: sticky;
top: 4rem;
}
.wp-block-latest-posts__post-date {
margin-bottom:36px;
}.wp-block-search.wp-block-search__button-inside .wp-block-search__inside-wrapper {border: none}</style>
<style id="core-block-supports-inline-css">.wp-elements-fea50d38d3b9b114f39bcb4ad4b116ff a:where(:not(.wp-element-button)){color:var(--wp--preset--color--base);}.wp-container-core-navigation-is-layout-1.wp-container-core-navigation-is-layout-1{gap:20px;}.wp-container-core-group-is-layout-1.wp-container-core-group-is-layout-1{justify-content:space-between;}.wp-elements-72e07f095da13a7bb673ea461d9ed494 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--primary);}.wp-elements-9aa739effdf6d06d6e39339e4e43e1b3 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--secondary);}.wp-container-core-group-is-layout-3.wp-container-core-group-is-layout-3{flex-wrap:nowrap;gap:10px;}.wp-elements-bd79afba7f00a2d2e79e252b6511e7e8 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--secondary);}.wp-container-core-group-is-layout-5.wp-container-core-group-is-layout-5{justify-content:space-between;}.wp-container-core-group-is-layout-7.wp-container-core-group-is-layout-7 > *{margin-block-start:0;margin-block-end:0;}.wp-container-core-group-is-layout-7.wp-container-core-group-is-layout-7.wp-container-core-group-is-layout-7.wp-container-core-group-is-layout-7 > * + *{margin-block-start:var(--wp--preset--spacing--medium);margin-block-end:0;}.wp-container-core-columns-is-layout-1.wp-container-core-columns-is-layout-1{flex-wrap:nowrap;}.wp-elements-6e0a8c899515679c402384022b4528f4 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--base);}.wp-container-core-social-links-is-layout-1.wp-container-core-social-links-is-layout-1{gap:20px 20px;justify-content:center;}.wp-container-core-columns-is-layout-2.wp-container-core-columns-is-layout-2{flex-wrap:nowrap;gap:var(--wp--preset--spacing--x-large) var(--wp--preset--spacing--x-large);}.wp-elements-f61512c823a772c477503f2d41fb0964 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--main-accent);}.wp-container-core-group-is-layout-8.wp-container-core-group-is-layout-8{gap:var(--wp--preset--spacing--small);justify-content:center;}.wp-container-core-group-is-layout-10.wp-container-core-group-is-layout-10 > *{margin-block-start:0;margin-block-end:0;}.wp-container-core-group-is-layout-10.wp-container-core-group-is-layout-10.wp-container-core-group-is-layout-10.wp-container-core-group-is-layout-10 > * + *{margin-block-start:var(--wp--preset--spacing--x-large);margin-block-end:0;}.wp-duotone-unset-2.wp-block-post-featured-image img, .wp-duotone-unset-2.wp-block-post-featured-image .wp-block-post-featured-image__placeholder, .wp-duotone-unset-2.wp-block-post-featured-image .components-placeholder__illustration, .wp-duotone-unset-2.wp-block-post-featured-image .components-placeholder::before{filter:unset;}</style>
<style id="wp-block-template-skip-link-inline-css">.skip-link.screen-reader-text {
border: 0;
clip: rect(1px,1px,1px,1px);
clip-path: inset(50%);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute !important;
width: 1px;
word-wrap: normal !important;
}
.skip-link.screen-reader-text:focus {
background-color: #eee;
clip: auto !important;
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;
}</style>
<link rel="stylesheet" id="ollie-css" href="/wp-content/themes/ollie/style.css?ver=1.1.0" media="all">
<style id="generateblocks-inline-css">.gb-container-d6a21a91{padding:16px 32px 32px;margin-left:32px;border-radius:10px;border:1px solid #636381;background-color:#f6f6fc;}.gb-container-e4ec5504{min-height:100%;padding-right:10px;padding-left:10px;}.gb-image-a925ba7b{vertical-align:middle;}.gb-grid-wrapper > .gb-grid-column-adf39bfb{width:25%;}.gb-grid-wrapper > .gb-grid-column-6b3ae155{width:50%;}.gb-grid-wrapper > .gb-grid-column-e35f2f56{width:25%;}.gb-grid-wrapper-2a306ad3{display:flex;flex-wrap:wrap;}.gb-grid-wrapper-2a306ad3 > .gb-grid-column{box-sizing:border-box;}.gb-grid-wrapper-59f62d27{display:flex;flex-wrap:wrap;}.gb-grid-wrapper-59f62d27 > .gb-grid-column{box-sizing:border-box;}.gb-container-b8fc53d3{text-align:left;}.gb-container-b8fc53d3 > .gb-inside-container{padding-left:0;}.gb-grid-wrapper > .gb-grid-column-b8fc53d3{width:100%;}.gb-grid-wrapper > .gb-grid-column-b8fc53d3 > .gb-container{display:flex;flex-direction:column;height:100%;}.gb-container-582182de > .gb-inside-container{max-width:1100px;margin-left:auto;margin-right:auto;}.gb-grid-wrapper > .gb-grid-column-582182de > .gb-container{display:flex;flex-direction:column;height:100%;}.gb-container-f253ffaa > .gb-inside-container{max-width:1100px;margin-left:auto;margin-right:auto;}.gb-grid-wrapper > .gb-grid-column-f253ffaa > .gb-container{display:flex;flex-direction:column;height:100%;}@media (max-width: 767px) {.gb-grid-wrapper > .gb-grid-column-adf39bfb{width:100%;}.gb-grid-wrapper > .gb-grid-column-6b3ae155{width:100%;}.gb-grid-wrapper > .gb-grid-column-e35f2f56{width:100%;}.gb-grid-wrapper > .gb-grid-column-b8fc53d3{width:100%;}}.gb-container .wp-block-image img{vertical-align:middle;}.gb-grid-wrapper .wp-block-image{margin-bottom:0;}.gb-highlight{background:none;}</style>
<script src="/wp-content/plugins/table-of-contents/assets/js/frontend.js?ver=1.0.2" id="ideabox-toc-script-js"></script>
<link rel="https://api.w.org/" href="/wp-json/">
<link rel="alternate" type="application/json" href="/wp-json/wp/v2/posts/5312">
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="/xmlrpc.php?rsd">
<meta name="generator" content="WordPress 6.5.5">
<link rel="canonical" href="/rundown-of-linkedins-sre-practices/">
<link rel="shortlink" href="/?p=5312">
<link rel="alternate" type="application/json+oembed" href="/wp-json/oembed/1.0/embed?url=%2Frundown-of-linkedins-sre-practices%2F">
<link rel="alternate" type="text/xml+oembed" href="/wp-json/oembed/1.0/embed?url=%2Frundown-of-linkedins-sre-practices%2F#038;format=xml">
<!-- StarBox - the Author Box for Humans 3.5.2, visit: http://wordpress.org/plugins/starbox/ -->
<!-- /StarBox - the Author Box for Humans -->
<!-- HappyForms global container -->
<script type="text/javascript">HappyForms = {};</script>
<!-- End of HappyForms global container -->
<meta name="bmi-version" content="1.4.5">
<style>.blog .wp-block-post-template .wp-block-post:last-child .entry-content + .wp-block-separator, .archive .wp-block-post-template .wp-block-post:last-child .entry-content + .wp-block-separator, .blog .wp-block-post-template .wp-block-post:last-child .entry-content + .wp-block-separator, .search .wp-block-post-template .wp-block-post:last-child .wp-block-post-excerpt + .wp-block-separator { display: none; }</style>
<script id="wp-load-polyfill-importmap">
( HTMLScriptElement.supports && HTMLScriptElement.supports("importmap") ) || document.write( '<script src="https://sysmit.com/cf22/wp-includes/js/dist/vendor/wp-polyfill-importmap.min.js?ver=1.8.2"><\/scr' + 'ipt>' );
</script>
<script type="importmap" id="wp-importmap">{"imports":{"@wordpress\/interactivity":"\/wp-includes\/js\/dist\/interactivity.min.js?ver=6.5.5"}}</script>
<script type="module" src="/wp-includes/blocks/navigation/view.min.js?ver=6.5.5" id="@wordpress/block-library/navigation-js-module"></script>
<link rel="modulepreload" href="/wp-includes/js/dist/interactivity.min.js?ver=6.5.5" id="@wordpress/interactivity-js-modulepreload">
<script>(function (s, e, n, d, er) {
s['Sender'] = er;
s[er] = s[er] || function () {
(s[er].q = s[er].q || []).push(arguments)
}, s[er].l = 1 * new Date();
var a = e.createElement(n),
m = e.getElementsByTagName(n)[0];
a.async = 1;
a.src = d;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', 'https://cdn.sender.net/accounts_resources/universal.js', 'sender');
sender('bdd6b34bc12137')</script><style id="wp-fonts-local">@font-face{font-family:Inter;font-style:normal;font-weight:100 700;font-display:block;src:url('/wp-content/themes/ollie/assets/fonts/Inter-VariableFont_slnt,wght.woff2') format('woff2');font-stretch:normal;}</style>
<link rel="icon" href="/wp-content/uploads/SREpath-favicon-120x120.png" sizes="32x32">
<link rel="icon" href="/wp-content/uploads/SREpath-favicon.png" sizes="192x192">
<link rel="apple-touch-icon" href="/wp-content/uploads/SREpath-favicon.png">
<meta name="msapplication-TileImage" content="/wp-content/uploads/SREpath-favicon.png">
</head>
<body class="post-template-default single single-post postid-5312 single-format-standard wp-custom-logo wp-embed-responsive">
<div class="wp-site-blocks">
<header class="site-header wp-block-template-part">
<div class="wp-block-group alignfull has-base-color has-main-background-color has-text-color has-background has-link-color wp-elements-fea50d38d3b9b114f39bcb4ad4b116ff has-global-padding is-layout-constrained wp-block-group-is-layout-constrained" style="margin-top:0px;padding-top:var(--wp--preset--spacing--large);padding-right:var(--wp--preset--spacing--medium);padding-bottom:var(--wp--preset--spacing--large);padding-left:var(--wp--preset--spacing--medium)">
<div class="wp-block-group alignwide is-content-justification-space-between is-layout-flex wp-container-core-group-is-layout-1 wp-block-group-is-layout-flex">
<div class="wp-block-site-logo"><a href="/" class="custom-logo-link" rel="home"><img width="167" height="30" src="/wp-content/uploads/SREpath-logo-main.png" class="custom-logo" alt="Boost software reliability | SREpath" decoding="async" srcset="/wp-content/uploads/SREpath-logo-main.png 478w, /wp-content/uploads/SREpath-logo-main-300x54.png 300w" sizes="(max-width: 167px) 100vw, 167px"></a></div>
<nav class="has-text-color has-base-color has-small-font-size is-responsive wp-block-navigation has-small-font-size is-horizontal is-layout-flex wp-container-core-navigation-is-layout-1 wp-block-navigation-is-layout-flex" aria-label="Main Menu" data-wp-interactive="core/navigation" data-wp-context='{"overlayOpenedBy":{"click":false,"hover":false,"focus":false},"type":"overlay","roleAttribute":"","ariaLabel":"Menu"}'><button aria-haspopup="dialog" aria-label="Open menu" class="wp-block-navigation__responsive-container-open " data-wp-on--click="actions.openMenuOnClick" data-wp-on--keydown="actions.handleMenuKeydown"><svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" aria-hidden="true" focusable="false"><rect x="4" y="7.5" width="16" height="1.5"></rect><rect x="4" y="15" width="16" height="1.5"></rect></svg></button>
<div class="wp-block-navigation__responsive-container has-text-color has-base-color has-background has-main-background-color" id="modal-1" data-wp-class--has-modal-open="state.isMenuOpen" data-wp-class--is-menu-open="state.isMenuOpen" data-wp-watch="callbacks.initMenu" data-wp-on--keydown="actions.handleMenuKeydown" data-wp-on--focusout="actions.handleMenuFocusout" tabindex="-1">
<div class="wp-block-navigation__responsive-close" tabindex="-1">
<div class="wp-block-navigation__responsive-dialog" data-wp-bind--aria-modal="state.ariaModal" data-wp-bind--aria-label="state.ariaLabel" data-wp-bind--role="state.roleAttribute">
<button aria-label="Close menu" class="wp-block-navigation__responsive-container-close" data-wp-on--click="actions.closeMenuOnClick"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" width="24" height="24" aria-hidden="true" focusable="false"><path d="M13 11.8l6.1-6.3-1-1-6.1 6.2-6.1-6.2-1 1 6.1 6.3-6.5 6.7 1 1 6.5-6.6 6.5 6.6 1-1z"></path></svg></button>
<div class="wp-block-navigation__responsive-container-content" data-wp-watch="callbacks.focusFirstElement" id="modal-1-content">
<ul class="wp-block-navigation__container has-text-color has-base-color has-small-font-size is-responsive wp-block-navigation has-small-font-size">
<li class="has-small-font-size wp-block-navigation-item menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-5215 current_page_item wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="/" title=""><span class="wp-block-navigation-item__label">Home</span></a></li>
<li class="has-small-font-size wp-block-navigation-item wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="/reliability-tool-database/"><span class="wp-block-navigation-item__label">Reliability Tools</span></a></li>
<li class="has-small-font-size wp-block-navigation-item wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="/reliability-blueprint/"><span class="wp-block-navigation-item__label">Reliability Blueprint</span></a></li>
<li class="has-small-font-size wp-block-navigation-item wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="https://read.srepath.com/"><span class="wp-block-navigation-item__label">Newsletter</span></a></li>
<li class="has-small-font-size wp-block-navigation-item menu-item menu-item-type-taxonomy menu-item-object-category wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="/podcast/" title=""><span class="wp-block-navigation-item__label">Podcast</span></a></li>
<li class="has-small-font-size wp-block-navigation-item wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="/about/"><span class="wp-block-navigation-item__label">About</span></a></li>
</ul>
</div>
</div>
</div>
</div></nav>
</div>
</div>
</header>
<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:30%"><div class="gb-container gb-container-e4ec5504">
<div class="gb-container gb-container-d6a21a91 sticky-sidebar">
<div class="wp-block-ideabox-toc ib-block-toc" data-anchors="h2" data-collapsable="false"><div class="ib-toc-container ib-toc-list-style-numbers ib-toc-hierarchical ib-toc-expanded">
<div class="ib-toc-header" style="font-size:18px"><div class="ib-toc-header-title"><strong>Navigate this page</strong></div></div>
<div class="ib-toc-separator" style="height:1px"></div>
<div class="ib-toc-body" style="color:#000000;font-size:18px;--listSpacing:8px"><ol class="ib-toc-anchors"></ol></div>
</div></div>
</div>
</div></div>
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:60%">
<main class="wp-block-group alignwide is-layout-flow wp-container-core-group-is-layout-7 wp-block-group-is-layout-flow" style="margin-top:0;margin-bottom:0;padding-top:var(--wp--preset--spacing--small);padding-bottom:var(--wp--preset--spacing--xx-large)">
<div class="wp-block-group alignfull has-global-padding is-layout-constrained wp-block-group-is-layout-constrained">
<div style="font-style:normal;font-weight:500" class="taxonomy-category has-link-color has-text-color has-primary-color is-style-default wp-block-post-terms has-small-font-size wp-elements-72e07f095da13a7bb673ea461d9ed494">
<a href="/category/articles/" rel="tag">Articles</a><span class="wp-block-post-terms__separator">, </span><a href="/category/case-studies/" rel="tag">Case Studies</a>
</div>
<h1 class="wp-block-post-title has-xx-large-font-size has-secondary-font-family">Rundown of LinkedIn&#8217;s SRE practices</h1>
<div class="wp-block-group has-secondary-color has-text-color has-link-color has-small-font-size wp-elements-9aa739effdf6d06d6e39339e4e43e1b3 is-nowrap is-layout-flex wp-container-core-group-is-layout-3 wp-block-group-is-layout-flex">
<div style="font-style:normal;font-weight:500;" class="wp-block-post-author">
<div class="wp-block-post-author__avatar"><img alt="" src="https://secure.gravatar.com/avatar/866c53414d1bade269e2c68b0538d9a3?s=48&#038;d=mm&#038;r=g" srcset="https://secure.gravatar.com/avatar/866c53414d1bade269e2c68b0538d9a3?s=96&#038;d=mm&#038;r=g 2x" class="avatar avatar-48 photo" height="48" width="48" decoding="async"></div>
<div class="wp-block-post-author__content"><p class="wp-block-post-author__name">Ash Patel</p></div>
</div>
<p class="has-secondary-color has-text-color">·</p>
<div style="font-style:normal;font-weight:500;" class="wp-block-post-date"><time datetime="2023-01-25T07:07:18+10:00">January 25, 2023</time></div>
</div>
</div>
<div class="entry-content alignwide wp-block-post-content has-global-padding is-layout-constrained wp-block-post-content-is-layout-constrained">
<!-- StarBox - the Author Box for Humans 3.5.2, visit: http://wordpress.org/plugins/starbox/ -->
<!-- /StarBox - the Author Box for Humans -->
<link rel="stylesheet" id="656c5500aa-css" href="/wp-content/plugins/starbox/themes/fancy/css/frontend.min.css?ver=3.5.2" media="all">
<script src="/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script>
<script src="/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1" id="jquery-migrate-js"></script>
<script src="/wp-content/plugins/starbox/themes/fancy/js/frontend.min.js?ver=3.5.2" id="a0f1a0d918-js"></script>
<link rel="stylesheet" id="a337511978-css" href="/wp-content/plugins/starbox/themes/admin/css/hidedefault.min.css?ver=3.5.2" media="all">
<h2 class="gb-headline gb-headline-a1b666e4 gb-headline-text" id="introduction">Introduction</h2>
<p>LinkedIn has one of the most robust Site Reliability Engineering (SRE) practices around. </p>
<p>After all, as the social network of record for jobseekers and salespeople, it is the <strong>6th most trafficked website in the world, with over 1.5 billion unique visits per month</strong>. </p>
<p>LinkedIn&#8217;s Site Reliability Engineers (SREs) ensure all that traffic gets served with minimal dropouts and performance degradation. </p>
<p>SRE efforts will only continue to grow, as the company has an ambitious goal to “create economic opportunity for every member of the global workforce”. </p>
<p>LinkedIn&#8217;s management aims for it to be more than an online resume and make an “economic graph”; similar to Facebook’s social graph. One that maps every aspect of the global economy &#8211; companies, jobs, schools, skills, etc.</p>
<h2 class="gb-headline gb-headline-3325a492 gb-headline-text" id="%25f0%259f%2593%258a-here-are-some-performance-statistics-for-linkedin">📊 Here are some performance statistics for LinkedIn</h2>
<figure class="gb-block-image gb-block-image-a925ba7b"><img fetchpriority="high" decoding="async" width="1057" height="319" class="gb-image gb-image-a925ba7b" src="/wp-content/uploads/linkedin-sre-practice-statistics-1.png" alt="" title="linkedin-sre-practice-statistics-1" srcset="/wp-content/uploads/linkedin-sre-practice-statistics-1.png 1057w, /wp-content/uploads/linkedin-sre-practice-statistics-1-300x91.png 300w, /wp-content/uploads/linkedin-sre-practice-statistics-1-1024x309.png 1024w, /wp-content/uploads/linkedin-sre-practice-statistics-1-768x232.png 768w" sizes="(max-width: 1057px) 100vw, 1057px"></figure>
<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>
<h3 class="wp-block-heading" id="as-of-2022-linkedin-had">As of 2022, LinkedIn had:</h3>
<ul>
<li>850 million members</li>
<li>Between 1.25 to 1.5 billion unique visits per month&nbsp;</li>
<li>In May 2022, close to 1.5 billion unique global visitors had visited LinkedIn.com, up from 1.3 billion visitors in December 2021</li>
<li>39% (or 340 million) of users as Premium members</li>
</ul>
<h3 class="gb-headline gb-headline-1edd296a gb-headline-text" id="in-2017-linkedin-had">In 2017, LinkedIn had:</h3>
<ul>
<li>1500+ services in production</li>
<li>600 TB of stored data&nbsp;</li>
<li>ranking of 8th busiest website in the world</li>
<li>100+ SREs supporting 1000+ SW engineers (ratio 10:1 makes sense)</li>
<li>20,000+ production machines in operations</li>
<li>300+ RESTful services</li>
<li>performance targets of 10ms latency for 99% of services</li>
<li>100+ Kafka clusters handling 7 trillion messages per day</li>
</ul>
<p>Each Site Reliability Engineer at LinkedIn is responsible for ~500 machines, but that can go up or down depending on the needs of the system on the day.</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>“It is impressive to be able to handle this kind of [work]. This contributes to the challenge of finding the right people. Finding SREs who can operate at this level is a very big challenge.”</p>
<cite>— <a href="https://youtu.be/ZemNg9GYvOA?t=311">excerpt from video talk on SRE Hiring</a> by Greg Leffler, SRE manager at LinkedIn from 2012-2016</cite>
</blockquote>
<p>LinkedIn&#8217;s SRE managers found that many SRE candidates sought <strong>work that would allow them to leave a legacy when they move on</strong>. </p>
<p>This trait correlates with the capability to work with broad-spanning complex systems in ambiguous circumstances.</p>
<p>If you can do out-of-the-box thinking and work in tough situations, you&#8217;d want that work to have a lasting impact.</p>
<h2 class="gb-headline gb-headline-3116586b gb-headline-text" id="%25f0%259f%2594%25b1-how-sre-fits-into-linkedins-engineering-culture">🔱 How SRE fits into LinkedIn&#8217;s engineering culture</h2>
<h3 class="gb-headline gb-headline-ba7cb332 gb-headline-text" id="team-formation">Team formation</h3>
<ul>
<li>300+ SREs across 4 global offices — Bay Area (San Francisco, Palo Alto), New York City, Bangalore</li>
<li>Team size depends on whether they&#8217;re embedded in a product team or part of a dedicated SRE team</li>
<li>SREs get to pick the kind of team they want to be part of&nbsp;</li>
<li>Hybrid roles exist i.e. SREs who focus on systems or software development</li>
</ul>
<h4 class="gb-headline gb-headline-9aae1075 gb-headline-text" id="many-sres-at-linkedin-as-embedded-sres"><strong>Many SREs at LinkedIn as &#8220;embedded SREs&#8221;</strong></h4>
<p>In the mid-2010s, many SREs were distributed across product engineering teams i.e. embedded into the product team. </p>
<p>The reasoning behind this was that centralized teams eventually face issues that come with becoming a “shared service” i.e. not so critical to the day-to-day but only consulted if really necessary. </p>
<p>The centralized model would not have been conducive to LinkedIn&#8217;s SRE needs at the time. The thing to remember is that SRE is a continuously high-involvement practice and not only for when things go wrong.</p>
<div style="clear:both; margin-top:0em; margin-bottom:1em;"><a href="/google-site-reliability-consulting/" target="_blank" rel="dofollow" class="u3df8699ad047c47c67e7f5f1a4987051"><!-- INLINE RELATED POSTS 1/3 //--><style>.u3df8699ad047c47c67e7f5f1a4987051 { padding:0px; margin: 0; padding-top:1em!important; padding-bottom:1em!important; width:100%; display: block; font-weight:bold; background-color:#eaeaea; border:0!important; border-left:4px solid #34495E!important; text-decoration:none; } .u3df8699ad047c47c67e7f5f1a4987051:active, .u3df8699ad047c47c67e7f5f1a4987051:hover { opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; text-decoration:none; } .u3df8699ad047c47c67e7f5f1a4987051 { transition: background-color 250ms; webkit-transition: background-color 250ms; opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; } .u3df8699ad047c47c67e7f5f1a4987051 .ctaText { font-weight:bold; color:#464646; text-decoration:none; font-size: 16px; } .u3df8699ad047c47c67e7f5f1a4987051 .postTitle { color:#000000; text-decoration: underline!important; font-size: 16px; } .u3df8699ad047c47c67e7f5f1a4987051:hover .postTitle { text-decoration: underline!important; }</style>
<div style="padding-left:1em; padding-right:1em;">
<span class="ctaText">Related article:</span>&nbsp; <span class="postTitle">#22 &#8211; How Google does SRE consulting (with Yury Niño Roa)</span>
</div></a></div>
<h4 class="gb-headline gb-headline-c2bc8b88 gb-headline-text" id="linkedin-has-a-large-sre-base-in-india"><strong>LinkedIn has a large SRE base in India</strong></h4>
<p>LinkedIn&#8217;s engineering management focused strongly on creating SRE teams in India. This may be partly due to hiring difficulties endemic to the SRE field in North America and Europe. </p>
<p>There were initial difficulties as SRE had a stigma within talent pools in India. </p>
<p>Many with years of experience perceived SRE as a relabelled or glorified systems administration role. LinkedIn&#8217;s SRE hiring managers instead focused on turning junior engineers and graduates into high-potential SREs. </p>
<p>They emphasized from the outset that SRE was not a typical operations role and that it would involve broad-spanning work in ambiguous settings.</p>
<p>As of 2017, the Bangalore office of LinkedIn had 60 SREs in 10 teams.&nbsp; </p>
<h3 class="gb-headline gb-headline-f317bbcc gb-headline-text" id="history-of-sre-at-linkedin">History of SRE at LinkedIn</h3>
<h4 class="gb-headline gb-headline-43d29896 gb-headline-text" id="prior-to-a-modern-sre-discipline-the-early-2010s"><strong>Prior to a modern SRE discipline (the early 2010s)</strong></h4>
<p>In 2013, LinkedIn rebranded teams in the existing discipline of AppOps to SRE. The newly minted SREs worked alongside stratified operations teams in verticals such as systems, networks, applications, and DBA. </p>
<p>This way of running software operations proved difficult as LinkedIn continued its growth trajectory. Several SREs noted issues like:</p>
<ul>
<li>Cooperation among these teams went only by way of tickets being sent to each other&nbsp;</li>
<li>There were walls not only between dev and ops but within ops itself</li>
<li>Developers did not have access to production and even most non-production environments &#8211; “hand me the code, and I will deploy it” so ops were bogged down with release operations</li>
<li>Pager fatigue was extreme with operations people training significant others to keep an eye for alerts on the Blackberry while they slept (3 alerts every 5 minutes on average)</li>
<li>Mon-Wed 6-10am outages due to capacity issues and little visibility into demand due to no observability instrumentation</li>
<li>Dealing with outages that were so frequent, there was an outage every day of the calendar year</li>
<li>MTTR was 1500 minutes, meaning issues were not getting resolved on the same day</li>
</ul>
<p>SREs originally started off in this environment as firefighters but evolved during a drastic shift in the software operations at LinkedIn.</p>
<h4 class="wp-block-heading" id="transitioning-to-sre-from-previous-operational-discipline"><strong>Transitioning to SRE from previous operational discipline</strong></h4>
<p>There was a need for change in the mid-2010s considering 100 million members relied on LinkedIn at the time. </p>
<p>LinkedIn could not mess up its increasingly complex software operations.</p>
<p>Something had to give, as LinkedIn was suffering frequent outages and performance issues despite now having an SRE team. </p>
<p>LinkedIn SREs and the wider organization had to challenge several antipatterns:</p>
<figure class="wp-block-table has-medium-font-size"><table><tbody>
<tr>
<td><strong>Antipattern identifier</strong></td>
<td><strong>Antipattern description</strong></td>
<td><strong>Shift to these propatterns…</strong></td>
</tr>
<tr>
<td>Firefighter 👨🏾‍🚒</td>
<td>❌ react to handle incidents that happen to keep the company functioning one more day</td>
<td>✅ automate the manual work<br>✅ deliver instrumentation to get rich data on issues and alerts<br>✅ understand the stack at a deeper level</td>
</tr>
<tr>
<td>Gatekeeper 💂🏽</td>
<td>❌ control releases to protect the site from developers<br>❌ “talk to me if you want to touch production”<br>❌ push a button to deploy someone else’s work<br>❌ have arbitrary schedules for releases</td>
<td>✅ develop automated gatekeepers to assure quality<br>✅ let developers own their work in production<br>✅ support developers in self-service deployment with the use of pre-launch checklists and release guidance </td>
</tr>
</tbody></table></figure>
<p>The decision was then made across the organization to radically change several aspects of software operations. This included a drastic shift in software architecture and developer involvement in operations for the first time.</p>
<p>To achieve this lofty goal, <strong>product development was stopped for 3 months</strong>. </p>
<div style="clear:both; margin-top:0em; margin-bottom:1em;"><a href="/evolution-of-cloud-infrastructure-teams/" target="_blank" rel="dofollow" class="u9f8e73efa1e9b1fd219d9799c14a353b"><!-- INLINE RELATED POSTS 2/3 //--><style>.u9f8e73efa1e9b1fd219d9799c14a353b { padding:0px; margin: 0; padding-top:1em!important; padding-bottom:1em!important; width:100%; display: block; font-weight:bold; background-color:#eaeaea; border:0!important; border-left:4px solid #34495E!important; text-decoration:none; } .u9f8e73efa1e9b1fd219d9799c14a353b:active, .u9f8e73efa1e9b1fd219d9799c14a353b:hover { opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; text-decoration:none; } .u9f8e73efa1e9b1fd219d9799c14a353b { transition: background-color 250ms; webkit-transition: background-color 250ms; opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; } .u9f8e73efa1e9b1fd219d9799c14a353b .ctaText { font-weight:bold; color:#464646; text-decoration:none; font-size: 16px; } .u9f8e73efa1e9b1fd219d9799c14a353b .postTitle { color:#000000; text-decoration: underline!important; font-size: 16px; } .u9f8e73efa1e9b1fd219d9799c14a353b:hover .postTitle { text-decoration: underline!important; }</style>
<div style="padding-left:1em; padding-right:1em;">
<span class="ctaText">Related article:</span>&nbsp; <span class="postTitle">How cloud infrastructure teams evolve &#8211; from start to maturity</span>
</div></a></div>
<p>This signified a gutsy commitment to drive the necessary change.</p>
<p>Several factors supported the transition to more effective software operations:</p>
<ul>
<li>The transition received solid management support from all affected VPs</li>
<li>The umbrella operations organization with sysadmins, network engineers, DB admins, etc. remained, but communication made it clear that it would not be business as usual&nbsp;</li>
<li>Major changes to how the software was architected came with support from experienced SREs and other seasoned engineers</li>
<li>Developers were increasingly involved in discussions about their ownership of software in production </li>
</ul>
<h4 class="gb-headline gb-headline-74d285d6 gb-headline-text" id="how-the-change-was-actioned-toward-a-modern-sre-discipline"><strong>How the change was actioned toward a modern SRE discipline</strong></h4>
<p>SREs initially advocated a few human-related practices to drive the change, including:</p>
<ul>
<li>encouraging and supporting developers in joining the on-call roster; some development teams got more into this, while others kept a distance from on-call&nbsp;</li>
<li>implement DevOps, where developers are involved in operational thinking and behaviors around self-deploying code &#8211; “If it’s checked-in, it’s ready to go to production”</li>
</ul>
<p>A few of the technical changes included:</p>
<ul>
<li>Move to a service-oriented architecture (SOA) and reduce dependence on monolithic artifacts</li>
<li>Develop self-service portals for consuming metrics around services</li>
<li>Enabling graceful degradation of services rather than 500 erroring the whole request load</li>
<li>Uptake of distributed database model vs monolith databases&nbsp;to reduce SPOF (single point of failure) risk</li>
<li>Switch from hardware to software-based load balancing</li>
<li>Centralized branch model to simplify the commit process compared to feature branches</li>
<li>Implemented multiple testing methodologies like pre-commit, PCS, and PCL </li>
<li>Develop an auto-remediation system to replace manual network operations center (NOC) processes — resulting in a career transition program for traditional operations roles into SRE</li>
<li>helping developers run A/B tests to ensure backward compatibility of their commit before users would see it&nbsp;</li>
<li>support self-service deployment with a <a href="https://engineering.linkedin.com/blog/2016/12/mttd-and-mttr-are-key">canary push to production</a> to ensure stability before rollout to the entire cluster </li>
</ul>
<p>Here&#8217;s a quick rundown of the <strong>cadence for self-service deployments for developers</strong> at LinkedIn:</p>
<ol>
<li>Canary to a single production instance</li>
<li>Check the automated metrics-based validation of success</li>
<li>Promote deployment to a single production data center</li>
<li>Promote deployment to remaining production centers</li>
<li>Ramp to an increasingly growing member base&nbsp;</li>
</ol>
<p>This self-service model has supported 15,000 commits and 600+ feature ramp-ups per day</p>
<p>Since the self-service model is now well entrenched in the LinkedIn culture, SREs continue their work on various other problems. They work in areas like performance, platforms, resilience, architecture, etc.</p>
<p>They use observability to inform them with data to develop and <a href="https://youtu.be/C8EL8rw4A8w?t=1246">implement tools that scale the LinkedIn application in production</a>. </p>
<p>In order to create these tools, SREs often use computer science skills and apply the scientific method, statistical analysis, and implement machine learning models.</p>
<h3 class="gb-headline gb-headline-2d1d3dcf gb-headline-text" id="what-is-linkedins-sre-culture-like">What is LinkedIn&#8217;s SRE culture like?</h3>
<h4 class="gb-headline gb-headline-d5d987b4 gb-headline-text" id="3-key-principles">
<strong>3 key principles</strong> </h4>
<p>Ben Purgason, Director of SRE at LinkedIn from 2017-2018, summarized LinkedIn&#8217;s SRE principles as:</p>
<ol>
<li>Site up </li>
<li>Empower developer ownership</li>
<li>Operations is an engineering problem</li>
</ol>
<p>Let&#8217;s explore each of these 3 principles in further detail:</p>
<ul>
<li>&#8220;Site up&#8221; is a simple catchphrase with the aim of making every engineer and system think of reliability as much as possible</li>
<li>&#8220;Empower developer ownership&#8221; asserts that developers own their work end-to-end, not just in the development phase</li>
<li>&#8220;Operations is an engineering problem&#8221; aims to involve engineering prowess in solving issues, not just push-button solutions</li>
</ul>
<h4 class="gb-headline gb-headline-05f01e62 gb-headline-text" id="hiring-culture-at-linkedin"><strong>Hiring culture at LinkedIn</strong></h4>
<p>Hiring culture at LinkedIn SRE aims for a good &#8220;culture fit&#8221;. This is a common practice among many modern tech companies. </p>
<div style="clear:both; margin-top:0em; margin-bottom:1em;"><a href="/runbooks-for-better-incident-response/" target="_blank" rel="dofollow" class="ue534395cf47a3175390566bdf3f60ad6"><!-- INLINE RELATED POSTS 3/3 //--><style>.ue534395cf47a3175390566bdf3f60ad6 { padding:0px; margin: 0; padding-top:1em!important; padding-bottom:1em!important; width:100%; display: block; font-weight:bold; background-color:#eaeaea; border:0!important; border-left:4px solid #34495E!important; text-decoration:none; } .ue534395cf47a3175390566bdf3f60ad6:active, .ue534395cf47a3175390566bdf3f60ad6:hover { opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; text-decoration:none; } .ue534395cf47a3175390566bdf3f60ad6 { transition: background-color 250ms; webkit-transition: background-color 250ms; opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; } .ue534395cf47a3175390566bdf3f60ad6 .ctaText { font-weight:bold; color:#464646; text-decoration:none; font-size: 16px; } .ue534395cf47a3175390566bdf3f60ad6 .postTitle { color:#000000; text-decoration: underline!important; font-size: 16px; } .ue534395cf47a3175390566bdf3f60ad6:hover .postTitle { text-decoration: underline!important; }</style>
<div style="padding-left:1em; padding-right:1em;">
<span class="ctaText">Related article:</span>&nbsp; <span class="postTitle">Runbooks for better incident response</span>
</div></a></div>
<p>However, there is an important distinction in LinkedIn SRE&#8217;s definition of culture fit. </p>
<p>Greg Leffler says, &#8220;Don’t just hire someone you’d want to hang out with after hours or on the weekend, or they’ve won hackathons or went to elite schools, but someone who can do the job&#8221;. </p>
<p>After all, Site Reliability Engineering is a unique line of work where success calls for more than past accolades and social prowess.</p>
<h4 class="gb-headline gb-headline-3a83a392 gb-headline-text" id="enable-everyone-to-selfservice-their-needs"><strong>Enable everyone to self-service their needs</strong></h4>
<p>As the LinkedIn member base grew, more services were added, and developer demand for hands-on support intensified. The need for a self-service approach became apparent as operations teams became stretched thin.</p>
<p>Over the years, LinkedIn SREs have developed several self-service tools and portals. </p>
<p>In particular, they focused on helping teams consume metrics around their specific service. Such metrics allowed teams to benchmark their service against other services. </p>
<p>This also allowed SREs to show teams if their service consumed outsized resources and needed to be optimized.</p>
<h4 class="gb-headline gb-headline-90f006fd gb-headline-text" id="fight-the-hero-worship-mentality"><strong>Fight the &#8220;hero worship&#8221; mentality</strong></h4>
<p>A long-lived philosophy in the software operations space has been to perform acts of heroics to rescue systems from critical failures e.g. &#8220;I survived going through a 36-hour war room to solve an ops crisis&#8221;. </p>
<p>LinkedIn&#8217;s change moved engineers away from that mindset. They have been steered to <strong>aim for proactive solutions that prevent the need for war rooms and heroic efforts in the first place</strong>.&nbsp;</p>
<h4 class="gb-headline gb-headline-c4b9b77e gb-headline-text" id="hunt-the-problems-without-a-straightforward-fix"><strong>Hunt the problems without a straightforward fix</strong></h4>
<p>Ben Pergason believed that it was important for their SREs to hunt problems that don’t have a straightforward fix. </p>
<p>The same went for problems that fit into the “too hard” basket for regular or old-school operations mindsets.</p>
<p>An example would be Ben&#8217;s <a href="https://engineering.linkedin.com/blog/2016/11/every-day-is-monday-in-operations">“Every day is Monday”</a> story about resolving a Python issue that had to be traced across all systems running the compiler. Let&#8217;s get into the details&#8230;</p>
<p>The fix was not a straightforward triage and took 750 engineer hours of time. However, the ROI was worth the effort. The fix saved close to 233 hours <em>per day</em> that would have been wasted in managing deployment errors.&nbsp; </p>
<p>The initial issue seemed from a distance to be a minor hindrance for some engineers. But the gravity of the situation grew fast as more systems and dependencies were found to be affected. </p>
<p>This error was because of a change made that affected a subsystem in an unexpected way. </p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>“The high-profile failures get dealt with immediately (roll back the change), but the minor ones, like an integration test with a 1% increased chance of failure, often slip through the cracks. These minor problems build on top of each other, resulting in a major problem with no obvious single cause. Regardless of the failure type, it is critical that we be aware of changes that occurred around the same time.”</em> </p>
<cite>— Ben Pergason, Director of SRE at LinkedIn from 2017 to 2018</cite>
</blockquote>
<h2 class="gb-headline gb-headline-20bb6558 gb-headline-text" id="parting-words">Parting words </h2>
<p>Countless issues happen in software systems all the time. They are often too peculiar or opaque for day-to-day teams to power through, especially if they have less proactive mindsets. </p>
<p>Truth is that systems are constantly changing, and someone needs to be able to navigate this. They do not have to know everything but investigate, experiment, and find solutions through unpaved paths.&nbsp;</p>
<p>As you have read above, the Site Reliability Engineers at LinkedIn are now well-equipped to handle tricky situations.</p>
<div class="abh_box abh_box_down abh_box_fancy">
<ul class="abh_tabs"> <li class="abh_about abh_active"><a href="#abh_about">Author</a></li> <li class="abh_posts"><a href="#abh_posts">Recent Posts</a></li>
</ul>
<div class="abh_tab_content">
<section class="vcard author abh_about_tab abh_tab" itemscope itemprop="author" itemtype="http://schema.org/Person" style="display:block"><div class="abh_image" itemscope itemtype="http://schema.org/ImageObject">
<a class="url" target="_blank" title="Ash Patel" rel="nofollow"> <img decoding="async" src="/wp-content/uploads/gravatar/3.jpeg" class="photo" width="250" alt="Ash Patel"></a> </div>
<div class="abh_social"> <div style="clear: both; font-size:12px; font-weight:normal; width: 85px; margin: 0 0 2px auto; line-height: 20px;">Connect?</div>
<a itemprop="sameAs" href="https://www.linkedin.com/in/ash-patel-srepath/" title="Twitter" class="abh_twitter" target="_blank" rel="nofollow"></a>
</div>
<div class="abh_text">
<div class="abh_name fn name" itemprop="name" style="font-size:20px !important;"><a class="url" target="_blank" rel="nofollow">Ash Patel</a></div>
<div class="abh_job" style="font-size:18px !important;">
<span class="title" style="font-size:18px !important;">Reliability Nut</span> at <span class="org" style="font-size:18px !important;"><a href="https://www.srepath.com/" target="_blank">SREpath</a></span>
</div>
<div class="description note abh_description" itemprop="description" style="font-size:18px !important;">Ash has an unhealthy obsession with software reliability. Maybe it&#8217;s got to do with the trauma of working at a few companies where software kept slowing or went down while he worked to turn it around. His ma hopes that he can one day turn this passion into a respectable job or business. Still waiting…</div>
</div> </section><section class="abh_posts_tab abh_tab"><div class="abh_image"><a class="url" target="_blank" title="Ash Patel" rel="nofollow"><img decoding="async" src="/wp-content/uploads/gravatar/3.jpeg" class="photo" width="250" alt="Ash Patel"></a></div>
<div class="abh_social"> <div style="clear: both; font-size:12px; font-weight:normal; width: 85px; margin: 0 0 2px auto; line-height: 20px;">Connect?</div>
<ahref title="Twitter" class="abh_twitter" target="_blank" rel="nofollow"></ahref>
</div>
<div class="abh_text">
<div class="abh_name" style="font-size:20px !important;">Latest posts by Ash Patel <span class="abh_allposts">(<a href="/author/kashaup/">see all</a>)</span>
</div>
<div class="abh_description note"><ul> <li style="font-size:18px !important;"> <a href="/sre-2016-book-reaction-chapter-1-part-1-3/">#34 From Cloud to Concrete: Should You Return to On-Prem?</a><span> &#8211; March 26, 2024</span> </li> <li style="font-size:18px !important;"> <a href="/sre-2016-book-reaction-chapter-1-part-1-2/">#33 Inside Google&#8217;s Data Center Design</a><span> &#8211; March 19, 2024</span> </li> <li style="font-size:18px !important;"> <a href="/platform-engineering-role-software-operations/">#32 Clarifying Platform Engineering&#8217;s Role (with Ajay Chankramath)</a><span> &#8211; March 14, 2024</span> </li>
</ul></div>
</div> </section>
</div> </div>
</div>
<div class="wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-group post-meta has-small-font-size is-content-justification-space-between is-layout-flex wp-container-core-group-is-layout-5 wp-block-group-is-layout-flex" style="border-radius:5px;margin-top:var(--wp--preset--spacing--large)"><div class="taxonomy-post_tag has-link-color has-text-color has-secondary-color is-style-term-button wp-block-post-terms wp-elements-bd79afba7f00a2d2e79e252b6511e7e8">
<a href="/tag/digital-transformation/" rel="tag">digital transformation</a><span class="wp-block-post-terms__separator">, </span><a href="/tag/sre-culture/" rel="tag">SRE culture</a>
</div></div>
</div>
</main>
</div>
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:20%"></div>
</div>
<footer class="site-footer wp-block-template-part">
<div class="wp-block-group alignfull dark-footer has-base-color has-main-background-color has-text-color has-background has-link-color wp-elements-6e0a8c899515679c402384022b4528f4 has-global-padding is-layout-constrained wp-container-core-group-is-layout-10 wp-block-group-is-layout-constrained" style="margin-top:0px;padding-top:var(--wp--preset--spacing--xx-large);padding-right:var(--wp--preset--spacing--medium);padding-bottom:var(--wp--preset--spacing--xx-large);padding-left:var(--wp--preset--spacing--medium)">
<div class="wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-2 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="has-text-align-center" style="font-style:normal;font-weight:600">Boost your software&#8217;s reliability</p>
<p class="has-text-align-center has-main-accent-color has-text-color has-small-font-size">That is our #1 goal on this site. </p>
<p class="has-text-align-center has-main-accent-color has-text-color has-small-font-size">We do this by decrypting the complexity around reliability-supporting practices.</p>
<p class="has-text-align-center has-main-accent-color has-text-color has-small-font-size">Practices like Site Reliability Engineering (SRE), DevOps and Platform Engineering.</p>
<p></p>
<div class="gb-grid-wrapper gb-grid-wrapper-2a306ad3">
<div class="gb-grid-column gb-grid-column-adf39bfb"><div class="gb-container gb-container-adf39bfb"></div></div>
<div class="gb-grid-column gb-grid-column-6b3ae155"><div class="gb-container gb-container-6b3ae155">
<iframe src="https://read.srepath.com/embed" width="480" height="320" style="border:1px solid #EEE; background:white;" frameborder="0" scrolling="no"></iframe>
</div></div>
<div class="gb-grid-column gb-grid-column-e35f2f56"><div class="gb-container gb-container-e35f2f56"></div></div>
</div>
<ul class="wp-block-social-links aligncenter has-icon-color has-icon-background-color is-style-default is-content-justification-center is-layout-flex wp-container-core-social-links-is-layout-1 wp-block-social-links-is-layout-flex"><li style="color: #150E29; background-color: #fff; " class="wp-social-link wp-social-link-linkedin has-main-color has-base-background-color wp-block-social-link"><a class="wp-block-social-link-anchor"><svg width="24" height="24" viewbox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z"></path></svg><span class="wp-block-social-link-label screen-reader-text">LinkedIn</span></a></li></ul>
</div>
</div>
<hr class="wp-block-separator alignwide has-text-color has-secondary-color has-alpha-channel-opacity has-secondary-background-color has-background is-style-separator-dotted">
<div class="wp-block-group alignwide is-layout-flow wp-block-group-is-layout-flow">
<div class="wp-block-group has-main-accent-color has-text-color has-link-color wp-elements-f61512c823a772c477503f2d41fb0964 is-content-justification-center is-layout-flex wp-container-core-group-is-layout-8 wp-block-group-is-layout-flex">
<p class="has-x-small-font-size">© 2024 · SREpath.com</p>
</div>
</div>
</div>
</footer>
</div>
<script id="wp-block-template-skip-link-js-after">( function() {
var skipLinkTarget = document.querySelector( 'main' ),
sibling,
skipLinkTargetID,
skipLink;
// Early exit if a skip-link target can't be located.
if ( ! skipLinkTarget ) {
return;
}
/*
* Get the site wrapper.
* The skip-link will be injected in the beginning of it.
*/
sibling = document.querySelector( '.wp-site-blocks' );
// Early exit if the root element was not found.
if ( ! sibling ) {
return;
}
// Get the skip-link target's ID, and generate one if it doesn't exist.
skipLinkTargetID = skipLinkTarget.id;
if ( ! skipLinkTargetID ) {
skipLinkTargetID = 'wp--skip-link--target';
skipLinkTarget.id = skipLinkTargetID;
}
// Create the skip link.
skipLink = document.createElement( 'a' );
skipLink.classList.add( 'skip-link', 'screen-reader-text' );
skipLink.href = '#' + skipLinkTargetID;
skipLink.innerHTML = 'Skip to content';
// Inject the skip link.
sibling.parentElement.insertBefore( skipLink, sibling );
}() );</script>
<script src="/wp-content/plugins/mystickysidebar/js/detectmobilebrowser.js?ver=1.2.3" id="detectmobilebrowser-js"></script>
<script id="mystickysidebar-js-extra">var mystickyside_name = {"mystickyside_string":"#secondary","mystickyside_content_string":"","mystickyside_margin_top_string":"90","mystickyside_margin_bot_string":"0","mystickyside_update_sidebar_height_string":"false","mystickyside_min_width_string":"795","device_desktop":"1","device_mobile":"1"};</script>
<script src="/wp-content/plugins/mystickysidebar/js/theia-sticky-sidebar.js?ver=1.2.3" id="mystickysidebar-js"></script>
</body>
</html>