Files
nexus/sreweekly/articles/431/07-quick-and-dirty-vs-polished-and-perfect-the-two-sides-of-engineering.html
2026-09-12 17:23:01 +08:00

1696 lines
118 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 class='bg-[#0B0C14]!' lang='en' prefix='og: https://ogp.me/ns#'>
<head>
<script nonce="104a4819783f5b4496acc93bf75e047e">
//<![CDATA[
(function() {
var theme = 'system';
try {
theme = localStorage.getItem('articles_theme') || 'system';
} catch (_) {}
var prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
var useDark = theme === 'dark' || (theme === 'system' && prefersDark);
if (useDark) {
document.documentElement.classList.add('dark');
document.documentElement.dataset.theme = 'dark';
} else {
document.documentElement.classList.remove('dark');
document.documentElement.dataset.theme = 'light';
}
})();
//]]>
</script><meta content='text/html; charset=UTF-8' http-equiv='Content-Type'>
<title>Quick and Dirty vs. Polished and Perfect: The Two Sides of Engineering | Better Stack</title>
<meta content='width=device-width,initial-scale=1' name='viewport'>
<link crossorigin='' href='https://cdnjs.betterstack.com' rel='preconnect'>
<link href='https://cdnjs.betterstack.com' rel='dns-prefetch'>
<link crossorigin='' href='https://www.googletagmanager.com' rel='preconnect'>
<link href='https://www.googletagmanager.com' rel='dns-prefetch'>
<link crossorigin='' href='https://plausible.io' rel='preconnect'>
<link href='https://plausible.io' rel='dns-prefetch'>
<link crossorigin='' href='https://forms.hsforms.com' rel='preconnect'>
<link href='https://forms.hsforms.com' rel='dns-prefetch'>
<link crossorigin='' href='https://js.hsforms.net' rel='preconnect'>
<link href='https://js.hsforms.net' rel='dns-prefetch'>
<link crossorigin='' href='https://connect.facebook.net' rel='preconnect'>
<link href='https://connect.facebook.net' rel='dns-prefetch'>
<link crossorigin='' href='https://static.ads-twitter.com' rel='preconnect'>
<link href='https://static.ads-twitter.com' rel='dns-prefetch'>
<link crossorigin='' href='https://bat.bing.com' rel='preconnect'>
<link href='https://bat.bing.com' rel='dns-prefetch'>
<link crossorigin='' href='https://snap.licdn.com' rel='preconnect'>
<link href='https://snap.licdn.com' rel='dns-prefetch'>
<link crossorigin='' href='https://googleads.g.doubleclick.net' rel='preconnect'>
<link href='https://googleads.g.doubleclick.net' rel='dns-prefetch'>
<link crossorigin='' href='https://analytics.twitter.com' rel='preconnect'>
<link href='https://analytics.twitter.com' rel='dns-prefetch'>
<link crossorigin='' href='https://chat-assets.frontapp.com' rel='preconnect'>
<link href='https://chat-assets.frontapp.com' rel='dns-prefetch'>
<link crossorigin='' href='https://t.betterstack.com' rel='preconnect'>
<link href='https://t.betterstack.com' rel='dns-prefetch'>
<link href='/assets/favicon-64296699.png' rel='shortcut icon'>
<meta content='Every great engineer knows how to toggle between two fundamentally different, yet equally important styles of work: &quot;Let&#39;s wing it&quot; hacking and corporate-level &quot;measure twice, cut once&quot; engineering.' name='description'>
<meta content='website' property='og:type'>
<meta content='Quick and Dirty vs. Polished and Perfect: The Two Sides of Engineering | Better Stack' property='og:title'>
<meta content='Every great engineer knows how to toggle between two fundamentally different, yet equally important styles of work: &quot;Let&#39;s wing it&quot; hacking and corporate-level &quot;measure twice, cut once&quot; engineering.' property='og:description'>
<meta content='https://betterstack.com/og-image/two-sides.png' property='og:image'>
<meta content='summary_large_image' property='twitter:card'>
<meta content='betterstackhq' property='twitter:site'>
<meta content='Quick and Dirty vs. Polished and Perfect: The Two Sides of Engineering | Better Stack' property='twitter:title'>
<meta content='Every great engineer knows how to toggle between two fundamentally different, yet equally important styles of work: &quot;Let&#39;s wing it&quot; hacking and corporate-level &quot;measure twice, cut once&quot; engineering.' property='twitter:description'>
<meta content='https://betterstack.com/og-image/two-sides.png' property='twitter:image'>
<meta content='no-cache' name='turbo-cache-control'>
<link href='https://betterstack.com/community/blog/two-sides/' rel='canonical'>
<link href='https://betterstack.com/community/blog/two-sides.md' rel='alternate' type='text/markdown'>
<meta content='https://betterstack.com/community/blog/two-sides/' property='og:url'>
<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="Vf1FxgHkF6Vh3CydR6PzrMf-7nCRg2S_UgnvNJ-BsdVDdkDE5nRogtE7CgKy-TM0AzlbiayaguU1FplC2W4pMQ" />
<meta name="csp-nonce" content="104a4819783f5b4496acc93bf75e047e" />
<meta content='marketing.articles' name='bs-surface'>
<link href='https://cdnjs.betterstack.com/@vueform/multiselect@2.5.7/themes/default.css' rel='stylesheet'>
<link href='https://cdnjs.betterstack.com/floating-vue@2.0.0-beta.24/dist/style.css' rel='stylesheet'>
<link href='https://cdnjs.betterstack.com/@docsearch/css@3.5.2/dist/style.css' rel='stylesheet'>
<link rel="preload" href="/static/fonts/Helvetica/HelveticaNowText-Regular-1.0.woff2" as="font" type="font/woff2" crossorigin="anonymous">
<link rel="preload" href="/static/fonts/Helvetica/HelveticaNowText-Medium-1.0.woff2" as="font" type="font/woff2" crossorigin="anonymous">
<link rel="preload" href="/static/fonts/Helvetica/HelveticaNowText-Bold-1.0.woff2" as="font" type="font/woff2" crossorigin="anonymous">
<link rel="preload" href="/static/fonts/Helvetica/HelveticaNowDisplay-Medium-1.0.woff2" as="font" type="font/woff2" crossorigin="anonymous">
<link rel="preload" href="/static/fonts/Helvetica/HelveticaNowDisplay-Bold-1.0.woff2" as="font" type="font/woff2" crossorigin="anonymous">
<style>
@font-face {
font-family: 'Helvetica Now Text';
src: local('Helvetica Now Text Regular'),
local('HelveticaNowText-Regular'),
url('/static/fonts/Helvetica/HelveticaNowText-Regular-1.0.woff2') format('woff2');
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Helvetica Now Text';
src: local('Helvetica Now Text Medium'),
local('HelveticaNowText-Medium'),
url('/static/fonts/Helvetica/HelveticaNowText-Medium-1.0.woff2') format('woff2');
font-weight: 500;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Helvetica Now Text';
src: local('Helvetica Now Text Bold'),
local('HelveticaNowText-Bold'),
url('/static/fonts/Helvetica/HelveticaNowText-Bold-1.0.woff2') format('woff2');
font-weight: 700;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Helvetica Now Display';
src: local('Helvetica Now Display Medium'),
local('HelveticaNowDisplay-Medium'),
url('/static/fonts/Helvetica/HelveticaNowDisplay-Medium-1.0.woff2') format('woff2');
font-weight: 500;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Helvetica Now Display';
src: local('Helvetica Now Display Bold'),
local('HelveticaNowDisplay-Bold'),
url('/static/fonts/Helvetica/HelveticaNowDisplay-Bold-1.0.woff2') format('woff2');
font-weight: 700;
font-style: normal;
font-display: swap;
}
</style>
<script nonce='104a4819783f5b4496acc93bf75e047e'>
// Store pixel IDs and configuration globally
window.trackingConfig = {
gaId: 'G-9FLKD0MQYY',
adwordsId: 'AW-10805602682',
facebookId: '1062799887416376',
twitterId: 'qbv2s',
microsoftId: '17516957',
linkedinId: '8770794',
redditId: 't2_bywzx23t',
openaiId: '8F4u2fGW2vBkWMMpukDbgf',
plausibleDomain: 'betterstack.com',
domains: ["betterstack.com","betterstack.test","betteruptime.com","uptime.betterstack.com","logtail.com","telemetry.betterstack.com","errors.betterstack.com","warehouse.betterstack.com","chat.betterstack.com","rum.betterstack.com"],
initialized: {
ga: false,
facebook: false,
twitter: false,
microsoft: false,
linkedin: false,
reddit: false,
openai: false,
plausible: false
}
};
</script>
<script async src='https://www.googletagmanager.com/gtag/js?id=G-9FLKD0MQYY'></script>
<script nonce='104a4819783f5b4496acc93bf75e047e'>
// Setup gtag function but don't initialize tracking
window.dataLayer = window.dataLayer || [];
function gtag(){window.dataLayer.push(arguments);}
// Initialize Google Analytics only when consent is granted
function initializeGoogleAnalytics() {
if (window.trackingConfig.initialized.ga) return;
gtag('js', new Date());
gtag('set', 'linker', { 'domains': window.trackingConfig.domains });
gtag('config', window.trackingConfig.gaId, {
linker: { domains: window.trackingConfig.domains }
});
gtag('config', window.trackingConfig.adwordsId, {
linker: { domains: window.trackingConfig.domains }
});
window.trackingConfig.initialized.ga = true;
}
</script>
<script nonce='104a4819783f5b4496acc93bf75e047e'>
// Initialize Facebook Pixel only when consent is granted
function initializeFacebookPixel() {
if (window.trackingConfig.initialized.facebook) return;
!function(f,b,e,v,n,t){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;(b.head||b.documentElement).appendChild(t)}(window,
document,'script','https://connect.facebook.net/en_US/fbevents.js');
fbq('init', window.trackingConfig.facebookId);
fbq('track', 'PageView');
window.trackingConfig.initialized.facebook = true;
}
</script>
<script nonce='104a4819783f5b4496acc93bf75e047e'>
function initializeTwitterPixel() {
if (window.trackingConfig.initialized.twitter) return;
!function(e,t,n,s,u){e.twq||(s=e.twq=function(){s.exe?s.exe.apply(s,arguments):s.queue.push(arguments);
},s.version='1.1',s.queue=[],u=t.createElement(n),u.async=!0,u.src='https://static.ads-twitter.com/uwt.js',
(t.head||t.documentElement).appendChild(u))}(window,document,'script');
twq('config', window.trackingConfig.twitterId);
twq('track','PageView');
window.trackingConfig.initialized.twitter = true;
}
</script>
<script nonce='104a4819783f5b4496acc93bf75e047e'>
function initializeMicrosoftAds() {
if (window.trackingConfig.initialized.microsoft) return;
!function(e,t,n,a,o){var c,r,m;e[o]=e[o]||[],c=function(){
// A throw from bat.js's load handler escapes initializeAllTracking's catch
if(typeof UET==="undefined")return;
var t={ti:window.trackingConfig.microsoftId};
t.q=e[o],e[o]=new UET(t),e[o].push("pageLoad")
},
(r=t.createElement(n)).src="//bat.bing.com/bat.js",r.async=1,
r.onload=r.onreadystatechange=function(){
var e=this.readyState;
e&&"loaded"!==e&&"complete"!==e||(c(),r.onload=r.onreadystatechange=null)
},
m=t.querySelector("[nonce]"),
m&&r.setAttribute("nonce",m.nonce||m.getAttribute("nonce")),
(t.head||t.documentElement).appendChild(r)
}(window,document,"script",0,"uetq");
window.trackingConfig.initialized.microsoft = true;
}
</script>
<script nonce='104a4819783f5b4496acc93bf75e047e'>
function initializeLinkedInPixel() {
if (window.trackingConfig.initialized.linkedin) return;
_linkedin_partner_id = window.trackingConfig.linkedinId;
window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];
window._linkedin_data_partner_ids.push(_linkedin_partner_id);
(function(l) {
if (!l){
window.lintrk = function(a,b){window.lintrk.q.push([a,b])};
window.lintrk.q=[];
}
var b = document.createElement("script");
b.type = "text/javascript";
b.async = true;
b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js";
(document.head || document.documentElement).appendChild(b);
})(window.lintrk);
window.trackingConfig.initialized.linkedin = true;
}
</script>
<script nonce='104a4819783f5b4496acc93bf75e047e'>
function initializeRedditPixel() {
if (window.trackingConfig.initialized.reddit) return;
!function(w,d){
if(!w.rdt){
var p=w.rdt=function(){
p.sendEvent?p.sendEvent.apply(p,arguments):p.callQueue.push(arguments)
};
p.callQueue=[];
var t=d.createElement("script");
t.src="https://www.redditstatic.com/ads/pixel.js",
t.async=!0;
(d.head||d.documentElement).appendChild(t)
}
}(window,document);
rdt('init', window.trackingConfig.redditId, {
"optOut":false,
"useDecimalCurrencyValues":true
});
rdt('track', 'PageVisit');
window.trackingConfig.initialized.reddit = true;
}
</script>
<script nonce='104a4819783f5b4496acc93bf75e047e'>
function initializeOpenAIPixel() {
if (window.trackingConfig.initialized.openai) return;
(function (w, d, s, u) {
if (w.oaiq) return;
var q = function () { q.q.push(arguments); };
q.q = [];
w.oaiq = q;
var js = d.createElement(s);
js.async = true;
js.src = u;
(d.head || d.documentElement).appendChild(js);
})(window, document, "script", "https://bzrcdn.openai.com/sdk/oaiq.min.js");
oaiq("init", { pixelId: window.trackingConfig.openaiId });
window.trackingConfig.initialized.openai = true;
}
</script>
<script nonce='104a4819783f5b4496acc93bf75e047e'>
function initializePlausible() {
if (window.trackingConfig.initialized.plausible) return;
if (document.querySelector('script[data-domain]')) return;
var script = document.createElement('script');
script.defer = true;
script.setAttribute('data-domain', window.trackingConfig.plausibleDomain);
script.src = 'https://plausible.io/js/plausible.js';
document.head.appendChild(script);
window.trackingConfig.initialized.plausible = true;
}
</script>
<script nonce='104a4819783f5b4496acc93bf75e047e'>
// Function to initialize all tracking pixels
function initializeAllTracking() {
// Isolated so one vendor snippet throwing cannot stop the pixels after it from initializing
[
initializeGoogleAnalytics,
initializeFacebookPixel,
initializeTwitterPixel,
initializeMicrosoftAds,
initializeLinkedInPixel,
initializeRedditPixel,
initializeOpenAIPixel,
initializePlausible
].forEach(function(initializePixel) {
try {
initializePixel();
} catch (error) {
// Rethrown out of band so it still reaches error tracking, which loads asynchronously
setTimeout(function() { throw error; });
}
});
}
// Function to check consent and initialize if granted
function checkConsentAndInitialize() {
// Check for cookie consent
var consent = document.cookie.match(/cookie_consent=([^;]+)/);
if (consent && consent[1] === 'accept_all') {
// Full consent - initialize all tracking
initializeAllTracking();
}
}
// Check consent on page load
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', checkConsentAndInitialize);
} else {
checkConsentAndInitialize();
}
// Listen for consent being granted
document.addEventListener('cookie-consent-granted', function(event) {
if (event.detail.consentType === 'accept_all') {
initializeAllTracking();
}
});
// Handle Turbo navigation
document.addEventListener('turbo:load', function() {
checkConsentAndInitialize();
// Track page views only if pixels are initialized
if (window.trackingConfig.initialized.ga && typeof gtag === 'function') {
gtag('set', 'page_path', location.pathname);
gtag('event', 'page_view');
}
if (window.trackingConfig.initialized.facebook && typeof fbq === 'function') {
fbq('track', 'PageView');
}
if (window.trackingConfig.initialized.twitter && typeof twq === 'function') {
twq('track','PageView');
}
if (window.trackingConfig.initialized.microsoft && typeof uetq !== 'undefined' && window.uetq) {
uetq.push('event', 'page_view', { 'page_path': location.pathname });
}
if (window.trackingConfig.initialized.reddit && typeof rdt === 'function') {
rdt('track', 'PageVisit');
}
});
// Remove noscript elements which break DOMParser (keep this as-is)
document.addEventListener('turbo:before-render', function(event) {
event.detail.newBody.querySelectorAll('noscript').forEach((e) => e.remove());
});
</script>
<script type="application/javascript" nonce="104a4819783f5b4496acc93bf75e047e">
//<![CDATA[
// Recovers from the module load failures a fresh page load fixes: hashed bundles gone stale after
// a deploy, and an origin that briefly fails to serve a hashed module.
//
// partials/_javascript_importmap_tags inlines this as a classic script ahead of every module
// script, which is the point of the file: when a module in the entry graph fails to fetch, no
// module in that graph evaluates, so a handler living inside the graph is never installed for the
// very failure it exists to catch. Never import it. Every byte here ships on every page, so keep
// it small.
;(function () {
// Our CSP nonce is per request, so Turbo sees this tag as a new head script on every visit and
// re-runs it (Snapshot#copyNewHeadScriptElements). The listeners are on window and outlive the
// visit, so without this guard they would stack up one set per navigation.
if (window.bsModuleLoadRecoveryInstalled) return
window.bsModuleLoadRecoveryInstalled = true
const RELOAD_FLAG_KEY = 'bs:module-load-reloaded'
// es-module-shims' doFetch throws "<status> <statusText> <url>[ imported from <parent>]" for an
// HTTP error (the reported "504 Gateway Timeout ...") and "Unable to fetch <url> ..." when the
// request never completes. Anchoring on the leading status instead of the "imported from" suffix
// also catches parentless top-level loads, and ignores prose that merely says "imported from".
const isRecoverableMessage = (message) =>
/Failed to fetch dynamically imported module/i.test(message) || // Chrome
/error loading dynamically imported module/i.test(message) || // Firefox
/Importing a module script failed/i.test(message) || // Safari
/^\d{3} .*https?:\/\//.test(message) ||
/^Unable to fetch https?:\/\/.* - see network log for details/i.test(message)
const reloadOnce = () => {
try {
if (window.sessionStorage.getItem(RELOAD_FLAG_KEY) === '1') return
window.sessionStorage.setItem(RELOAD_FLAG_KEY, '1')
} catch (_e) {
// Private browsing or storage disabled: without the flag we cannot bound the reloads
return
}
window.location.reload()
}
// A <script type="module"> fires `error` on the element when its graph fails to fetch or parse,
// and not when the graph throws while executing, so app bugs cannot reach this. Browsers without
// import map support never resolve our bare specifiers natively and so always fire it (they are
// the ones es-module-shims loads the page for), hence the check.
const isFailedModuleScript = (target) =>
target?.tagName === 'SCRIPT' &&
target.type === 'module' &&
HTMLScriptElement.supports?.('importmap')
window.addEventListener('error', (event) => {
if (isFailedModuleScript(event.target)) {
reloadOnce()
return
}
if (isRecoverableMessage(event.error?.message ?? event.message ?? '')) reloadOnce()
}, true)
window.addEventListener('unhandledrejection', (event) => {
if (!isRecoverableMessage(event.reason?.message ?? event.reason?.toString?.() ?? '')) return
// Drop the browser's own "Uncaught (in promise)" reporting since we are handling it by
// reloading. Error tracking still sees the rejection through its own listener.
event.preventDefault?.()
reloadOnce()
})
})()
//]]>
</script>
<script type="importmap" data-turbo-track="reload" nonce="104a4819783f5b4496acc93bf75e047e">{
"imports": {
"admin_controllers/article_form_controller": "/assets/admin_controllers/article_form_controller-95d029c4.js",
"admin_controllers": "/assets/admin_controllers/index-577d86b7.js",
"admin_controllers/version_remove_controller": "/assets/admin_controllers/version_remove_controller-25fe23d4.js",
"api/NaturalLanguageParserApi": "/assets/api/NaturalLanguageParserApi-6338d3e0.js",
"application_controllers/account_settings_controller": "/assets/application_controllers/account_settings_controller-3db785e5.js",
"application_controllers/command_controller": "/assets/application_controllers/command_controller-0bb2b651.js",
"application_controllers/command_palette_controller": "/assets/application_controllers/command_palette_controller-c8ef377a.js",
"application_controllers/command_palette_hierarchy_controller": "/assets/application_controllers/command_palette_hierarchy_controller-471f9137.js",
"application_controllers/dismissible_onboarding_message_controller": "/assets/application_controllers/dismissible_onboarding_message_controller-51b86556.js",
"application_controllers/dropdown_controller": "/assets/application_controllers/dropdown_controller-cd5a7d95.js",
"application_controllers/front_chat_controller": "/assets/application_controllers/front_chat_controller-7f7483ef.js",
"application_controllers/hotkeys_controller": "/assets/application_controllers/hotkeys_controller-8f7b8a5a.js",
"application_controllers/incident_grouping_warning_controller": "/assets/application_controllers/incident_grouping_warning_controller-27bd9c43.js",
"application_controllers": "/assets/application_controllers/index-27c5a1ae.js",
"application_controllers/input_self_select_controller": "/assets/application_controllers/input_self_select_controller-501017f3.js",
"application_controllers/marketing_banner_controller": "/assets/application_controllers/marketing_banner_controller-94b92f59.js",
"application_controllers/marketing_banner_form_controller": "/assets/application_controllers/marketing_banner_form_controller-df791955.js",
"application_controllers/members/list_actions_controller": "/assets/application_controllers/members/list_actions_controller-5cbd4e77.js",
"application_controllers/menu_controller": "/assets/application_controllers/menu_controller-74d4b11b.js",
"application_controllers/nav_toggle_controller": "/assets/application_controllers/nav_toggle_controller-a05915d3.js",
"application_controllers/notification_toast_controller": "/assets/application_controllers/notification_toast_controller-9ae0e943.js",
"application_controllers/notification_toasts_controller": "/assets/application_controllers/notification_toasts_controller-e12edc4a.js",
"application_controllers/payment/calculator_controller": "/assets/application_controllers/payment/calculator_controller-223526b4.js",
"application_controllers/payment/change_plan_controller": "/assets/application_controllers/payment/change_plan_controller-26bedf06.js",
"application_controllers/payment/enter_card_controller": "/assets/application_controllers/payment/enter_card_controller-2948de25.js",
"application_controllers/payment/plan_controller": "/assets/application_controllers/payment/plan_controller-ed75908a.js",
"application_controllers/payment/refund_controller": "/assets/application_controllers/payment/refund_controller-40b79f6e.js",
"application_controllers/plan_product_controller": "/assets/application_controllers/plan_product_controller-12023246.js",
"application_controllers/plan_product_variable_controller": "/assets/application_controllers/plan_product_variable_controller-9e792f37.js",
"application_controllers/roles/permission_toggle_controller": "/assets/application_controllers/roles/permission_toggle_controller-06f00cc6.js",
"application_controllers/search/base_controller": "/assets/application_controllers/search/base_controller-3684d31d.js",
"application_controllers/single_sign_on/generic_controller": "/assets/application_controllers/single_sign_on/generic_controller-2b999970.js",
"application_controllers/single_sign_on/okta_controller": "/assets/application_controllers/single_sign_on/okta_controller-050106f0.js",
"application_controllers/transition_controller": "/assets/application_controllers/transition_controller-55e4e0fc.js",
"articles/tabs": "/assets/articles/tabs-c42fbc0f.js",
"articles_controllers/body_controller": "/assets/articles_controllers/body_controller-b7ed1f98.js",
"articles_controllers/code_controller": "/assets/articles_controllers/code_controller-a3b80b9c.js",
"articles_controllers": "/assets/articles_controllers/index-2a641587.js",
"articles_controllers/lightbox_controller": "/assets/articles_controllers/lightbox_controller-9e772aad.js",
"articles_controllers/pill_scroller_controller": "/assets/articles_controllers/pill_scroller_controller-56e6ad4d.js",
"articles_controllers/preview_diff_controller": "/assets/articles_controllers/preview_diff_controller-d021df3a.js",
"articles_controllers/search_controller": "/assets/articles_controllers/search_controller-6cbf77e4.js",
"articles_controllers/theme_controller": "/assets/articles_controllers/theme_controller-df419c92.js",
"articles_controllers/toc_controller": "/assets/articles_controllers/toc_controller-372f9d3c.js",
"articles_controllers/toggle_controller": "/assets/articles_controllers/toggle_controller-447bdd4f.js",
"betterstack_v2/carousel": "/assets/betterstack_v2/carousel-9e6623b0.js",
"betterstack_v2/collapse": "/assets/betterstack_v2/collapse-5e9e0fbd.js",
"betterstack_v2/gallery": "/assets/betterstack_v2/gallery-989fbe63.js",
"betterstack_v2/menu": "/assets/betterstack_v2/menu-57c876ee.js",
"betterstack_v2/search": "/assets/betterstack_v2/search-18938513.js",
"betterstack_v2/slide": "/assets/betterstack_v2/slide-5dbecfaf.js",
"betterstack_v2/toggle": "/assets/betterstack_v2/toggle-b0145939.js",
"betterstack_v2/typeformTracking": "/assets/betterstack_v2/typeformTracking-95d1395a.js",
"channels": "/assets/channels/index-746bc0ef.js",
"channels/turbo_betterstack": "/assets/channels/turbo_betterstack-9c9119c4.js",
"common/aos": "/assets/common/aos-f5c6bb9a.js",
"common/billing": "/assets/common/billing-f8a38000.js",
"common/copy": "/assets/common/copy-e9580a10.js",
"common/data-disable-with-spinner": "/assets/common/data-disable-with-spinner-ce85e302.js",
"common/drag-n-drop": "/assets/common/drag-n-drop-9b7df6f9.js",
"common/lazy": "/assets/common/lazy-3f5ba6f1.js",
"common/links": "/assets/common/links-ae98a9e4.js",
"common/modals": "/assets/common/modals-3906d5a2.js",
"common/moduleLoadRecovery": "/assets/common/moduleLoadRecovery-8bffe4b6.js",
"common/railsSetup": "/assets/common/railsSetup-25c4cf53.js",
"common/recaptchaSubmit": "/assets/common/recaptchaSubmit-e4783e18.js",
"common/side-menu-scroll": "/assets/common/side-menu-scroll-4d201e25.js",
"common/signupConversions": "/assets/common/signupConversions-f9e02d75.js",
"common/site_settings_bootstrap": "/assets/common/site_settings_bootstrap-c104a0e6.js",
"common/site_settings_panel": "/assets/common/site_settings_panel-812b3a51.js",
"common/stripe": "/assets/common/stripe-11d3a577.js",
"common_controllers/auth_controller": "/assets/common_controllers/auth_controller-b172459c.js",
"common_controllers/careers_roles_controller": "/assets/common_controllers/careers_roles_controller-83a48712.js",
"common_controllers/carousel_controller": "/assets/common_controllers/carousel_controller-981b577e.js",
"common_controllers/clipboard_controller": "/assets/common_controllers/clipboard_controller-d6bd31ec.js",
"common_controllers/cloud_downtime_controller": "/assets/common_controllers/cloud_downtime_controller-d41c242d.js",
"common_controllers/cloud_fit_controller": "/assets/common_controllers/cloud_fit_controller-2f9024d0.js",
"common_controllers/cloud_pricing_controller": "/assets/common_controllers/cloud_pricing_controller-5f4f58e2.js",
"common_controllers/collapse_controller": "/assets/common_controllers/collapse_controller-c1e140f6.js",
"common_controllers/comparison_table_controller": "/assets/common_controllers/comparison_table_controller-132abf18.js",
"common_controllers/copy_prompt_controller": "/assets/common_controllers/copy_prompt_controller-a705d39f.js",
"common_controllers/dev_bar_controller": "/assets/common_controllers/dev_bar_controller-8dae09df.js",
"common_controllers/flash_appear_controller": "/assets/common_controllers/flash_appear_controller-bb83796e.js",
"common_controllers/header_controller": "/assets/common_controllers/header_controller-a3d9ce2a.js",
"common_controllers/homepage_hero_controller": "/assets/common_controllers/homepage_hero_controller-43f0e439.js",
"common_controllers": "/assets/common_controllers/index-48f61257.js",
"common_controllers/modal_opener_controller": "/assets/common_controllers/modal_opener_controller-0b1595e8.js",
"common_controllers/oauth_redirect_controller": "/assets/common_controllers/oauth_redirect_controller-b4b35c10.js",
"common_controllers/oauth_scope_picker_controller": "/assets/common_controllers/oauth_scope_picker_controller-01e79351.js",
"common_controllers/onboarding/features_controller": "/assets/common_controllers/onboarding/features_controller-38589028.js",
"common_controllers/onboarding/payment_controller": "/assets/common_controllers/onboarding/payment_controller-d9cacb71.js",
"common_controllers/onboarding/plan_controller": "/assets/common_controllers/onboarding/plan_controller-74fa6b4a.js",
"common_controllers/onboarding/telemetry_bundles_controller": "/assets/common_controllers/onboarding/telemetry_bundles_controller-1cf06818.js",
"common_controllers/onboarding/test_call_controller": "/assets/common_controllers/onboarding/test_call_controller-8b34faf3.js",
"common_controllers/org_nav_controller": "/assets/common_controllers/org_nav_controller-2899c4ca.js",
"common_controllers/org_nav_row_controller": "/assets/common_controllers/org_nav_row_controller-c6cb77b8.js",
"common_controllers/pricing_controller": "/assets/common_controllers/pricing_controller-47fff143.js",
"common_controllers/recaptcha_controller": "/assets/common_controllers/recaptcha_controller-3bc13838.js",
"common_controllers/scroll_into_view_controller": "/assets/common_controllers/scroll_into_view_controller-989870ac.js",
"common_controllers/side_nav_controller": "/assets/common_controllers/side_nav_controller-b8c260c3.js",
"common_controllers/signup_controller": "/assets/common_controllers/signup_controller-6234698c.js",
"common_controllers/status_page_layout_controller": "/assets/common_controllers/status_page_layout_controller-e8e44b26.js",
"common_controllers/tabs_controller": "/assets/common_controllers/tabs_controller-15f6ffaa.js",
"common_controllers/timezone_controller": "/assets/common_controllers/timezone_controller-583829fb.js",
"common_controllers/video_modal_controller": "/assets/common_controllers/video_modal_controller-41524ff9.js",
"common_controllers/warehouse_code_block_controller": "/assets/common_controllers/warehouse_code_block_controller-c2c3abe7.js",
"components/DatePicker": "/assets/components/DatePicker-c4134f3e.js",
"components/InviteLinkDropdown": "/assets/components/InviteLinkDropdown-35f3fe83.js",
"components/Modal": "/assets/components/Modal-4b145c81.js",
"components/NativeSelect": "/assets/components/NativeSelect-33371fd7.js",
"components/SideNavigation": "/assets/components/SideNavigation-a1dc27bc.js",
"components/ThemeSwitcher": "/assets/components/ThemeSwitcher-d50ce36b.js",
"components/Toasts": "/assets/components/Toasts-ac15198b.js",
"components/UserMenu": "/assets/components/UserMenu-d2eed9cb.js",
"components/WithSpinner": "/assets/components/WithSpinner-19730ca7.js",
"components/admin/AiArticle": "/assets/components/admin/AiArticle-0f485faf.js",
"components/admin/AiArticlesList": "/assets/components/admin/AiArticlesList-67d19e53.js",
"components/admin/AiAssistant": "/assets/components/admin/AiAssistant-eb225e70.js",
"components/admin/AiSummary": "/assets/components/admin/AiSummary-79559c3f.js",
"components/admin/ArticleLink": "/assets/components/admin/ArticleLink-f0f3c2a4.js",
"components/admin/ArticlesSelect": "/assets/components/admin/ArticlesSelect-1bfd3e34.js",
"components/admin/MenuBuilder": "/assets/components/admin/MenuBuilder-77e35318.js",
"components/admin/utils/menuTree": "/assets/components/admin/utils/menuTree-56b0d957.js",
"components/billing/BillableBadge": "/assets/components/billing/BillableBadge-02da648d.js",
"components/billing/ChangePlans": "/assets/components/billing/ChangePlans-3cc40d22.js",
"components/billing/FeatureCountSlider": "/assets/components/billing/FeatureCountSlider-d31eeeb7.js",
"components/billing/PaymentMethodsSelect": "/assets/components/billing/PaymentMethodsSelect-ff23fd24.js",
"components/billing/ProductVariables": "/assets/components/billing/ProductVariables-359a003b.js",
"components/billing/RegionDropdown": "/assets/components/billing/RegionDropdown-1afaf96a.js",
"components/billing/ResponderSeatsSelector": "/assets/components/billing/ResponderSeatsSelector-96e83ba7.js",
"components/billing/UpcomingPlan": "/assets/components/billing/UpcomingPlan-7e6e404d.js",
"components/charts/BarChart": "/assets/components/charts/BarChart-433ec399.js",
"components/charts/theme": "/assets/components/charts/theme-c7b0f807.js",
"components/charts/utils/formatTooltip": "/assets/components/charts/utils/formatTooltip-209a7d5f.js",
"components/command_palette/CommandPalette": "/assets/components/command_palette/CommandPalette-b76680c1.js",
"components/dev_bar/CopyImpersonateLink": "/assets/components/dev_bar/CopyImpersonateLink-ac5cc00a.js",
"components/docs/Code": "/assets/components/docs/Code-39228c52.js",
"components/docs/CodeTab": "/assets/components/docs/CodeTab-a65a976e.js",
"components/docs/CopyDropdown": "/assets/components/docs/CopyDropdown-4d4698d3.js",
"components/docs/TokenLoader": "/assets/components/docs/TokenLoader-c39cc5c1.js",
"components/docs/TokenNotice": "/assets/components/docs/TokenNotice-a2188092.js",
"components/docs/TokenPicker": "/assets/components/docs/TokenPicker-95e85505.js",
"components/forms/AIPromptEditor": "/assets/components/forms/AIPromptEditor-d93d8813.js",
"components/forms/AuditLogsToggle": "/assets/components/forms/AuditLogsToggle-0af5a9c0.js",
"components/forms/BasicForm": "/assets/components/forms/BasicForm-a9f858ec.js",
"components/forms/Collapse": "/assets/components/forms/Collapse-d2b96d60.js",
"components/forms/CopyOnClick": "/assets/components/forms/CopyOnClick-51d525f4.js",
"components/forms/DotsDropdown": "/assets/components/forms/DotsDropdown-965de662.js",
"components/forms/DotsDropdownNew": "/assets/components/forms/DotsDropdownNew-0c629056.js",
"components/forms/Dropdown": "/assets/components/forms/Dropdown-3327ca7b.js",
"components/forms/GatedToggle": "/assets/components/forms/GatedToggle-9a5537f3.js",
"components/forms/HeadersJson": "/assets/components/forms/HeadersJson-1a0a512a.js",
"components/forms/HighlightedTextarea": "/assets/components/forms/HighlightedTextarea-50b49322.js",
"components/forms/HolidayModeForm": "/assets/components/forms/HolidayModeForm-92b31c4a.js",
"components/forms/LogoField": "/assets/components/forms/LogoField-f35ad206.js",
"components/forms/ModalTemplate": "/assets/components/forms/ModalTemplate-16854a22.js",
"components/forms/MultiplyingInput": "/assets/components/forms/MultiplyingInput-92ae04d5.js",
"components/forms/Select": "/assets/components/forms/Select-2d0e048c.js",
"components/forms/SelectWithSearch": "/assets/components/forms/SelectWithSearch-3b92cbec.js",
"components/forms/SessionsForm": "/assets/components/forms/SessionsForm-7dff6538.js",
"components/forms/Slider": "/assets/components/forms/Slider-d2c532b7.js",
"components/forms/Spinner": "/assets/components/forms/Spinner-b7c5b935.js",
"components/forms/TimezoneSelect": "/assets/components/forms/TimezoneSelect-fc1b95cb.js",
"components/forms/Toggle": "/assets/components/forms/Toggle-cf1a8471.js",
"components/forms/Tooltip": "/assets/components/forms/Tooltip-18ae06ee.js",
"components/forms/uppyLoader": "/assets/components/forms/uppyLoader-16803d05.js",
"components": "/assets/components/index-d406f1c5.js",
"components/monaco/editor": "/assets/components/monaco/editor-0590c3fb.js",
"components/notifications/Dropdown": "/assets/components/notifications/Dropdown-35167b74.js",
"components/notifications/Item": "/assets/components/notifications/Item-bdf035ef.js",
"components/onboarding/PhonePrefixSelect": "/assets/components/onboarding/PhonePrefixSelect-43778322.js",
"components/roles/CollectorPermissions": "/assets/components/roles/CollectorPermissions-23e81031.js",
"components/roles/IntegrationPermissions": "/assets/components/roles/IntegrationPermissions-c575de40.js",
"components/roles/ResourceGroupPermissions": "/assets/components/roles/ResourceGroupPermissions-c3a3d875.js",
"components/roles/ServicePermissions": "/assets/components/roles/ServicePermissions-0bf60768.js",
"components/sessions/EmailPrompt": "/assets/components/sessions/EmailPrompt-f5ab0a9a.js",
"components/shared/DatePickerRangeSelector": "/assets/components/shared/DatePickerRangeSelector-99c9cbab.js",
"components/shared/DateRangeSelector": "/assets/components/shared/DateRangeSelector-bcd70467.js",
"components/stores/DocsStore": "/assets/components/stores/DocsStore-7fbbd320.js",
"components/stores/MainStore": "/assets/components/stores/MainStore-6e855ac2.js",
"components/stores/RegionStore": "/assets/components/stores/RegionStore-b2ff0da4.js",
"components/stores/ToastStore": "/assets/components/stores/ToastStore-85ec6bb2.js",
"components/stores/UsageStore": "/assets/components/stores/UsageStore-37848617.js",
"components/stores/index": "/assets/components/stores/index-feac8304.js",
"components/usage/Chart": "/assets/components/usage/Chart-361c804a.js",
"components/usage/DateRangeSelector": "/assets/components/usage/DateRangeSelector-b5a36521.js",
"components/usage/DimensionTab": "/assets/components/usage/DimensionTab-feb62639.js",
"components/usage/ProductLink": "/assets/components/usage/ProductLink-28e5cbe8.js",
"components/usage/ResolutionSelector": "/assets/components/usage/ResolutionSelector-679dded4.js",
"components/usage/Table": "/assets/components/usage/Table-f27294b3.js",
"composables/useCollapseHeight": "/assets/composables/useCollapseHeight-9d34f482.js",
"composables/useCommand": "/assets/composables/useCommand-54188fbb.js",
"composables/useHotkey": "/assets/composables/useHotkey-1b637420.js",
"composables/useTheme": "/assets/composables/useTheme-4aeb28da.js",
"entrypoints/admin_articles": "/assets/entrypoints/admin_articles-5afb028d.js",
"entrypoints/application": "/assets/entrypoints/application-0bf2e279.js",
"entrypoints/articles": "/assets/entrypoints/articles-8493a2b0.js",
"entrypoints/auth": "/assets/entrypoints/auth-420d62af.js",
"entrypoints/betterstack_v2": "/assets/entrypoints/betterstack_v2-5b1213a7.js",
"entrypoints/front": "/assets/entrypoints/front-027ace13.js",
"entrypoints/logtail": "/assets/entrypoints/logtail-1a871854.js",
"entrypoints/mobile": "/assets/entrypoints/mobile-26886af7.js",
"entrypoints/onboarding": "/assets/entrypoints/onboarding-bc97beb4.js",
"entrypoints/playwright": "/assets/entrypoints/playwright-edccfe8b.js",
"entrypoints/uptime": "/assets/entrypoints/uptime-dbe508ae.js",
"front/externalLinks": "/assets/front/externalLinks-63ea793c.js",
"front/router": "/assets/front/router-1c6ed265.js",
"logtail_controllers": "/assets/logtail_controllers/index-abb89f05.js",
"logtail_controllers/plans_controller": "/assets/logtail_controllers/plans_controller-153fac3c.js",
"mixins/withAbortController": "/assets/mixins/withAbortController-8adee905.js",
"mixins/withLiveBlanketPermission": "/assets/mixins/withLiveBlanketPermission-9695e8db.js",
"mobile/turbo-error-handler": "/assets/mobile/turbo-error-handler-ae0d058e.js",
"mobile_controllers/ButtonBridgeComponent": "/assets/mobile_controllers/ButtonBridgeComponent-c7a2bc9e.js",
"mobile_controllers/EventBridgeComponent": "/assets/mobile_controllers/EventBridgeComponent-4014e59a.js",
"mobile_controllers": "/assets/mobile_controllers/index-28e58582.js",
"mobile_controllers/otp_entry_controller": "/assets/mobile_controllers/otp_entry_controller-28d11d45.js",
"routes": "/assets/routes-b3cc0358.js",
"services/ClipboardService": "/assets/services/ClipboardService-2e240c3d.js",
"services/ModalManager": "/assets/services/ModalManager-1b69d01c.js",
"services/ThemeSwitcher": "/assets/services/ThemeSwitcher-f4023b19.js",
"services/WebStorageService": "/assets/services/WebStorageService-96eacd27.js",
"services/command_palette/CommandContext": "/assets/services/command_palette/CommandContext-61b0e09e.js",
"services/command_palette/CommandIndexWorker": "/assets/services/command_palette/CommandIndexWorker-3e5f1a23.js",
"services/command_palette/CommandSearch": "/assets/services/command_palette/CommandSearch-e56061fc.js",
"services/command_palette/Commands": "/assets/services/command_palette/Commands-5acb5990.js",
"services/command_palette/CommandsManager": "/assets/services/command_palette/CommandsManager-69d6cbf6.js",
"services/command_palette/HotkeyManager": "/assets/services/command_palette/HotkeyManager-c7aac698.js",
"timezones": "/assets/timezones-b1c6ab25.js",
"uptime_controllers": "/assets/uptime_controllers/index-ea83dbdd.js",
"uptime_controllers/plans_controller": "/assets/uptime_controllers/plans_controller-275e54b2.js",
"utils/RangeTimestamp": "/assets/utils/RangeTimestamp-5d741097.js",
"utils/RelativeTimestamp": "/assets/utils/RelativeTimestamp-4aceda0e.js",
"utils/authToken": "/assets/utils/authToken-3f69e5ee.js",
"utils/cardBrands": "/assets/utils/cardBrands-4e01a21a.js",
"utils/chartTooltipPosition": "/assets/utils/chartTooltipPosition-223d8a7b.js",
"utils/date": "/assets/utils/date-30bf4654.js",
"utils/diff": "/assets/utils/diff-54c7567c.js",
"utils/externalRoutes": "/assets/utils/externalRoutes-3f77f06a.js",
"utils/fetchJson": "/assets/utils/fetchJson-d5204866.js",
"utils/formatters": "/assets/utils/formatters-2ed5b123.js",
"utils/highlight": "/assets/utils/highlight-1975cdab.js",
"utils/hotkeyLabel": "/assets/utils/hotkeyLabel-957a7ffb.js",
"utils/importmap": "/assets/utils/importmap-2cb6bb64.js",
"utils/incidents/prompt_variables": "/assets/utils/incidents/prompt_variables-7e3382de.js",
"utils/isTouchDevice": "/assets/utils/isTouchDevice-ef97088e.js",
"utils/levenshtein": "/assets/utils/levenshtein-a23ae51b.js",
"utils/loadScript": "/assets/utils/loadScript-b2fe518e.js",
"utils/miniBindVueApp": "/assets/utils/miniBindVueApp-d1573a63.js",
"utils/mountVueApp": "/assets/utils/mountVueApp-d57cdb84.js",
"utils/naturalLanguageTimeParser": "/assets/utils/naturalLanguageTimeParser-ecfa0c29.js",
"utils/permissions": "/assets/utils/permissions-60f6a799.js",
"utils/platformDetection": "/assets/utils/platformDetection-ab98f3d1.js",
"utils/platforms": "/assets/utils/platforms-89317042.js",
"utils/queryParams": "/assets/utils/queryParams-18ae7afd.js",
"utils/rebindComponents": "/assets/utils/rebindComponents-e80ed3c4.js",
"utils/stripFallthroughAttributes": "/assets/utils/stripFallthroughAttributes-698b4f73.js",
"utils/timeago": "/assets/utils/timeago-d754ee58.js",
"utils/timestampToDayjs": "/assets/utils/timestampToDayjs-ec6d48be.js",
"utils/timezone": "/assets/utils/timezone-88296191.js",
"utils/vueProps": "/assets/utils/vueProps-a58a1369.js",
"vendor/aos@2.3.4": "/assets/vendor/aos@2.3.4-516f027d.js",
"vendor/cuid@2.1.8": "/assets/vendor/cuid@2.1.8-da32fb7d.js",
"vendor/domurl@2.3.4": "/assets/vendor/domurl@2.3.4-4f2f3541.js",
"vendor/floating-vue@5.2.0": "/assets/vendor/floating-vue@5.2.0-577e3eb1.js",
"vendor/frontapp-ui-bridge@2.0.0-beta1": "/assets/vendor/frontapp-ui-bridge@2.0.0-beta1-60e5015b.js",
"vendor/mime-match@1.0.2": "/assets/vendor/mime-match@1.0.2-d4882d07.js",
"vendor/monaco-editor-markdown@0.52.2": "/assets/vendor/monaco-editor-markdown@0.52.2-0245f0a5.js",
"vendor/monaco-editor-worker@0.52.2": "/assets/vendor/monaco-editor-worker@0.52.2-022da1df.js",
"vendor/monaco-editor@0.52.2": "/assets/vendor/monaco-editor@0.52.2-55952c28.js",
"vendor/namespace-emitter@2.0.1": "/assets/vendor/namespace-emitter@2.0.1-2dc3d975.js",
"vendor/pinia@3.0.0": "/assets/vendor/pinia@3.0.0-6bc36112.js",
"vendor/pinia@3.0.0.prod": "/assets/vendor/pinia@3.0.0.prod-dc83e9f4.js",
"vendor/primevue@4.0.7": "/assets/vendor/primevue@4.0.7-92d8ca1f.js",
"vendor/sentry-vue@10.30.0": "/assets/vendor/sentry-vue@10.30.0-41c96982.js",
"vendor/transloadit-prettier-bytes@0.0.9": "/assets/vendor/transloadit-prettier-bytes@0.0.9-54cf75df.js",
"vendor/turbo-rails@8.0.4": "/assets/vendor/turbo-rails@8.0.4-40d5bb50.js",
"vendor/vueform-multiselect@2.6.10": "/assets/vendor/vueform-multiselect@2.6.10-ec29cd25.js",
"vendor/wildcard@1.1.2": "/assets/vendor/wildcard@1.1.2-e197d4f1.js",
"vue": "https://cdnjs.betterstack.com/vue@3.5.13/dist/vue.esm-browser.prod.js",
"pinia": "/assets/vendor/pinia@3.0.0.prod-dc83e9f4.js",
"vue-turbolinks": "https://cdnjs.betterstack.com/vue-turbolinks@2.2.2/index.js",
"@sentry/vue": "/assets/vendor/sentry-vue@10.30.0-41c96982.js",
"@headlessui/vue": "https://cdnjs.betterstack.com/@headlessui/vue@1.7.4/dist/headlessui.esm.js",
"primevue": "/assets/vendor/primevue@4.0.7-92d8ca1f.js",
"vueform-multiselect": "/assets/vendor/vueform-multiselect@2.6.10-ec29cd25.js",
"vueform-slider": "https://cdnjs.betterstack.com/@vueform/slider@2.1.10/dist/slider.js",
"@hotwired/stimulus": "/assets/stimulus.min-5ea87a62.js",
"@hotwired/stimulus-loading": "/assets/stimulus-loading-449f59d0.js",
"@hotwired/turbo-rails": "/assets/vendor/turbo-rails@8.0.4-40d5bb50.js",
"@hotwired/hotwire-native-bridge": "https://cdnjs.betterstack.com/@hotwired/hotwire-native-bridge@1.2.2/dist/hotwire-native-bridge.js",
"@rails/actioncable": "https://cdnjs.betterstack.com/@rails/actioncable@8.0/app/assets/javascripts/actioncable.esm.js",
"@rails/activestorage": "https://cdnjs.betterstack.com/@rails/activestorage@8.0/app/assets/javascripts/activestorage.js",
"js-cookie": "https://cdnjs.betterstack.com/js-cookie@3.0.7/dist/js.cookie.min.mjs",
"lazysizes": "https://cdnjs.betterstack.com/lazysizes@5.3.2/lazysizes.min.js",
"el-transition": "https://cdnjs.betterstack.com/el-transition@0.0.7/index.js",
"dayjs": "https://cdnjs.betterstack.com/dayjs@1.11.7/esm/index.js",
"dayjs/": "https://cdnjs.betterstack.com/dayjs@1.11.7/esm/",
"dayjs/plugin/quarterOfYear.js": "https://cdnjs.betterstack.com/dayjs@1.11.7/esm/plugin/quarterOfYear/index.js",
"dayjs/plugin/timezone.js": "https://cdnjs.betterstack.com/dayjs@1.11.7/esm/plugin/timezone/index.js",
"dayjs/plugin/utc.js": "https://cdnjs.betterstack.com/dayjs@1.11.7/esm/plugin/utc/index.js",
"underscore/": "https://cdnjs.betterstack.com/underscore@1.13.8/modules/",
"nanoevents": "https://cdnjs.betterstack.com/nanoevents@7.0.1/index.js",
"decimal": "https://cdnjs.betterstack.com/decimal.js@10.4.3/decimal.mjs",
"lodash/": "https://cdnjs.betterstack.com/lodash-es@4.18.1/",
"lodash.throttle": "https://cdnjs.betterstack.com/lodash-es@4.18.1/throttle",
"aos": "/assets/vendor/aos@2.3.4-516f027d.js",
"domurl": "/assets/vendor/domurl@2.3.4-4f2f3541.js",
"@floating-ui/dom": "https://cdnjs.betterstack.com/@floating-ui/dom@1.4.4/dist/floating-ui.dom.browser.min.mjs",
"@floating-ui/core": "https://cdnjs.betterstack.com/@floating-ui/core@1.3.1/dist/floating-ui.core.browser.min.mjs",
"floating-vue": "/assets/vendor/floating-vue@5.2.0-577e3eb1.js",
"overtype": "https://cdnjs.betterstack.com/overtype@1.2.4/dist/overtype.min.js",
"echarts": "https://cdnjs.betterstack.com/echarts@5.4.0/dist/echarts.esm.min.js",
"echarts/core": "https://cdnjs.betterstack.com/echarts@5.4.0/dist/echarts.esm.min.js",
"vue-echarts": "https://cdnjs.betterstack.com/vue-echarts@6.6.1/dist/index.esm.min.js",
"resize-detector": "https://cdnjs.betterstack.com/resize-detector@0.3.0/esm/index.js",
"vue-demi": "https://cdnjs.betterstack.com/vue-demi@0.14.10/lib/index.mjs",
"@uppy/aws-s3": "https://cdnjs.betterstack.com/@uppy/aws-s3@3.2.0/lib/index.js",
"@uppy/aws-s3-multipart": "https://cdnjs.betterstack.com/@uppy/aws-s3-multipart@3.4.0/lib/index.js",
"@uppy/core": "https://cdnjs.betterstack.com/@uppy/core@3.2.1/lib/index.js",
"@uppy/core/": "https://cdnjs.betterstack.com/@uppy/core@3.2.1/",
"@uppy/companion-client": "https://cdnjs.betterstack.com/@uppy/companion-client@3.1.3/lib/index.js",
"@uppy/utils/": "https://cdnjs.betterstack.com/@uppy/utils@5.4.0/",
"@uppy/utils/lib/AbortController": "https://cdnjs.betterstack.com/@uppy/utils@5.4.0/lib/AbortController.js",
"@uppy/utils/lib/ErrorWithCause": "https://cdnjs.betterstack.com/@uppy/utils@5.4.0/lib/ErrorWithCause.js",
"@uppy/utils/lib/EventManager": "https://cdnjs.betterstack.com/@uppy/utils@5.4.0/lib/EventManager.js",
"@uppy/utils/lib/NetworkError": "https://cdnjs.betterstack.com/@uppy/utils@5.4.0/lib/NetworkError.js",
"@uppy/utils/lib/ProgressTimeout": "https://cdnjs.betterstack.com/@uppy/utils@5.4.0/lib/ProgressTimeout.js",
"@uppy/utils/lib/RateLimitedQueue": "https://cdnjs.betterstack.com/@uppy/utils@5.4.0/lib/RateLimitedQueue.js",
"@uppy/utils/lib/Translator": "https://cdnjs.betterstack.com/@uppy/utils@5.4.0/lib/Translator.js",
"@uppy/utils/lib/emitSocketProgress": "https://cdnjs.betterstack.com/@uppy/utils@5.4.0/lib/emitSocketProgress.js",
"@uppy/utils/lib/fetchWithNetworkError": "https://cdnjs.betterstack.com/@uppy/utils@5.4.0/lib/fetchWithNetworkError.js",
"@uppy/utils/lib/fileFilters": "https://cdnjs.betterstack.com/@uppy/utils@5.4.0/lib/fileFilters.js",
"@uppy/utils/lib/findDOMElement": "https://cdnjs.betterstack.com/@uppy/utils@5.4.0/lib/findDOMElement.js",
"@uppy/utils/lib/generateFileID": "https://cdnjs.betterstack.com/@uppy/utils@5.4.0/lib/generateFileID.js",
"@uppy/utils/lib/getFileNameAndExtension": "https://cdnjs.betterstack.com/@uppy/utils@5.4.0/lib/getFileNameAndExtension.js",
"@uppy/utils/lib/getFileType": "https://cdnjs.betterstack.com/@uppy/utils@5.4.0/lib/getFileType.js",
"@uppy/utils/lib/getSocketHost": "https://cdnjs.betterstack.com/@uppy/utils@5.4.0/lib/getSocketHost.js",
"@uppy/utils/lib/getTextDirection": "https://cdnjs.betterstack.com/@uppy/utils@5.4.0/lib/getTextDirection.js",
"@uppy/utils/lib/getTimeStamp": "https://cdnjs.betterstack.com/@uppy/utils@5.4.0/lib/getTimeStamp.js",
"@uppy/utils/lib/isNetworkError": "https://cdnjs.betterstack.com/@uppy/utils@5.4.0/lib/isNetworkError.js",
"@uppy/store-default": "https://cdnjs.betterstack.com/@uppy/store-default@3.0.3/lib/index.js",
"mime-match": "/assets/vendor/mime-match@1.0.2-d4882d07.js",
"namespace-emitter": "/assets/vendor/namespace-emitter@2.0.1-2dc3d975.js",
"nanoid/non-secure": "https://cdnjs.betterstack.com/nanoid@4.0.1/non-secure/index.js",
"preact": "https://cdnjs.betterstack.com/preact@10.11.0/dist/preact.module.js",
"@transloadit/prettier-bytes": "/assets/vendor/transloadit-prettier-bytes@0.0.9-54cf75df.js",
"wildcard": "/assets/vendor/wildcard@1.1.2-e197d4f1.js",
"@frontapp/plugin-sdk": "https://cdnjs.betterstack.com/@frontapp/plugin-sdk@1.0.1/dist/index.es.js",
"@frontapp/ui-bridge": "/assets/vendor/frontapp-ui-bridge@2.0.0-beta1-60e5015b.js",
"cuid": "/assets/vendor/cuid@2.1.8-da32fb7d.js",
"rxjs": "https://cdnjs.betterstack.com/rxjs@^7.4.0/dist/esm/index.js",
"rxjs/": "https://cdnjs.betterstack.com/rxjs@^7.4.0/dist/esm/",
"tslib": "https://cdnjs.betterstack.com/tslib@2.3.1/tslib.es6.js",
"virtua": "https://cdnjs.betterstack.com/virtua@0.39.0/lib/vue/index.mjs",
"flexsearch": "https://cdnjs.betterstack.com/flexsearch@0.7.43/dist/flexsearch.light.module.min.js",
"monaco-editor": "/assets/vendor/monaco-editor@0.52.2-55952c28.js",
"monaco-editor-markdown": "/assets/vendor/monaco-editor-markdown@0.52.2-0245f0a5.js",
"monaco-editor-worker": "/assets/vendor/monaco-editor-worker@0.52.2-022da1df.js",
"marked": "https://cdnjs.betterstack.com/marked@4.3.0/lib/marked.esm.js"
}
}</script>
<link rel="modulepreload" href="https://cdnjs.betterstack.com/vue@3.5.13/dist/vue.esm-browser.prod.js" nonce="104a4819783f5b4496acc93bf75e047e">
<link rel="modulepreload" href="/assets/vendor/pinia@3.0.0.prod-dc83e9f4.js" nonce="104a4819783f5b4496acc93bf75e047e">
<link rel="modulepreload" href="https://cdnjs.betterstack.com/vue-turbolinks@2.2.2/index.js" nonce="104a4819783f5b4496acc93bf75e047e">
<script type="esms-options" nonce="104a4819783f5b4496acc93bf75e047e">{"nonce":"104a4819783f5b4496acc93bf75e047e"}</script>
<script src="/assets/es-module-shims.min-806a0b27.js" defer="defer" data-turbo-track="reload" nonce="104a4819783f5b4496acc93bf75e047e"></script>
<script type="module" nonce="104a4819783f5b4496acc93bf75e047e">
//<![CDATA[
!function(b,e,t,r){
b[t]=b[t]||function(...args){(b[t].q=b[t].q||[]).push(args)};
b[t].l=+new Date;
var s=e.createElement('script'); s.async=1; s.crossOrigin='anonymous';
s.src='https://betterstack.net/b.js?t='+r;
(e.head||e.getElementsByTagName('head')[0]).appendChild(s);
}(window,document,'betterstack','aVNoLWfbToe2t8eM7abofTHL');
betterstack('init', { environment: window.cfg.environment, release: window.cfg.app_version })
function setBetterstackUser() {
betterstack('user', {
...(window.cfg.sentry_user || {}),
group_id: window.cfg.organization_id,
group_name: window.cfg.organization_name,
locale: Intl.NumberFormat().resolvedOptions().locale,
surface: document.querySelector('meta[name="bs-surface"]')?.content,
})
}
setBetterstackUser()
// Turbo swaps head metas per visit but doesn't re-run this script; refresh so events carry the current page's surface.
document.addEventListener('turbo:load', setBetterstackUser)
//]]>
</script>
<script type="module" nonce="104a4819783f5b4496acc93bf75e047e">import "entrypoints/articles"</script>
<script type="application/javascript" nonce="104a4819783f5b4496acc93bf75e047e">
//<![CDATA[
if (!HTMLScriptElement?.supports?.('importmap')) {
alert('Your browser is not supported. Please upgrade to a newer version of Chrome, Firefox, Safari or other modern browser.')
}
//]]>
</script>
<script type="module" nonce="104a4819783f5b4496acc93bf75e047e">import "channels"</script>
<link rel="stylesheet" href="https://betterstack.com/assets/articles-30168a5f.css" media="all" data-turbo-track="reload" />
<style>
@supports (-webkit-hyphens:none) {
.book, .book:hover {
filter: unset;
}
}
</style>
<script type="application/ld+json" nonce="104a4819783f5b4496acc93bf75e047e">
//<![CDATA[
[{"@context":"https://schema.org","@type":"Article","headline":"Quick and Dirty vs. Polished and Perfect: The Two Sides of Engineering","author":"Juraj Masar","image":"/og-image/two-sides.png","genre":"","keywords":"","publisher":{"@type":"Organization","name":"Better Stack","logo":{"@type":"ImageObject","url":"https://betterstack.com/assets/logo-553d2ba4.png"}},"url":"https://betterstack.com/community/blog/two-sides/","mainEntityOfPage":{"@type":"WebPage","@id":"https://google.com/article"},"datePublished":"2023-08-30T11:48:02Z","dateCreated":"2023-08-30T11:48:02Z","dateModified":"2023-10-13T11:48:06Z","description":"Every great engineer knows how to toggle between two fundamentally different, yet equally important styles of work: \"Let's wing it\" hacking and corporate-level \"measure twice, cut once\" engineering."}]
//]]>
</script><link as='font' crossorigin='anonymous' href='https://betterstack.com/static/fonts/Roobert/Roobert-Regular-1.0.woff2' rel='preload'>
<link as='font' crossorigin='anonymous' href='https://betterstack.com/static/fonts/Roobert/Roobert-Medium-1.0.woff2' rel='preload'>
<link as='font' crossorigin='anonymous' href='https://betterstack.com/static/fonts/Roobert/Roobert-SemiBold-1.0.woff2' rel='preload'>
<link as='font' crossorigin='anonymous' href='https://betterstack.com/static/fonts/Roobert/Roobert-Bold-1.0.woff2' rel='preload'>
<style>
@font-face {
font-family: "Roobert";
font-style: normal;
font-weight: 400;
font-display: swap;
src:
url("https://betterstack.com/static/fonts/Roobert/Roobert-Regular-1.0.woff2") format("woff2"),
url("https://betterstack.com/static/fonts/Roobert/Roobert-Regular-1.0.woff") format("woff");
}
@font-face {
font-family: "Roobert";
font-style: normal;
font-weight: 500;
font-display: swap;
src:
url("https://betterstack.com/static/fonts/Roobert/Roobert-Medium-1.0.woff2") format("woff2"),
url("https://betterstack.com/static/fonts/Roobert/Roobert-Medium-1.0.woff") format("woff");
}
@font-face {
font-family: "Roobert";
font-style: normal;
font-weight: 600;
font-display: swap;
src:
url("https://betterstack.com/static/fonts/Roobert/Roobert-SemiBold-1.0.woff2") format("woff2"),
url("https://betterstack.com/static/fonts/Roobert/Roobert-SemiBold-1.0.woff") format("woff");
}
@font-face {
font-family: "Roobert";
font-style: normal;
font-weight: 700;
font-display: swap;
src:
url("https://betterstack.com/static/fonts/Roobert/Roobert-Bold-1.0.woff2") format("woff2"),
url("https://betterstack.com/static/fonts/Roobert/Roobert-Bold-1.0.woff") format("woff");
}
</style>
<link as='font' crossorigin='anonymous' href='https://betterstack.com/static/fonts/Inter/Inter-latin-3.15.woff2' rel='preload'>
<style>
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 400 700;
font-display: swap;
src: url("https://betterstack.com/static/fonts/Inter/Inter-latin-3.15.woff2") format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
</style>
<link rel="preload" href="/static/fonts/Helvetica/HelveticaNowText-Regular-1.0.woff2" as="font" type="font/woff2" crossorigin="anonymous">
<link rel="preload" href="/static/fonts/Helvetica/HelveticaNowText-Medium-1.0.woff2" as="font" type="font/woff2" crossorigin="anonymous">
<link rel="preload" href="/static/fonts/Helvetica/HelveticaNowText-Bold-1.0.woff2" as="font" type="font/woff2" crossorigin="anonymous">
<link rel="preload" href="/static/fonts/Helvetica/HelveticaNowDisplay-Medium-1.0.woff2" as="font" type="font/woff2" crossorigin="anonymous">
<link rel="preload" href="/static/fonts/Helvetica/HelveticaNowDisplay-Bold-1.0.woff2" as="font" type="font/woff2" crossorigin="anonymous">
<style>
@font-face {
font-family: 'Helvetica Now Text';
src: local('Helvetica Now Text Regular'),
local('HelveticaNowText-Regular'),
url('/static/fonts/Helvetica/HelveticaNowText-Regular-1.0.woff2') format('woff2');
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Helvetica Now Text';
src: local('Helvetica Now Text Medium'),
local('HelveticaNowText-Medium'),
url('/static/fonts/Helvetica/HelveticaNowText-Medium-1.0.woff2') format('woff2');
font-weight: 500;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Helvetica Now Text';
src: local('Helvetica Now Text Bold'),
local('HelveticaNowText-Bold'),
url('/static/fonts/Helvetica/HelveticaNowText-Bold-1.0.woff2') format('woff2');
font-weight: 700;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Helvetica Now Display';
src: local('Helvetica Now Display Medium'),
local('HelveticaNowDisplay-Medium'),
url('/static/fonts/Helvetica/HelveticaNowDisplay-Medium-1.0.woff2') format('woff2');
font-weight: 500;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Helvetica Now Display';
src: local('Helvetica Now Display Bold'),
local('HelveticaNowDisplay-Bold'),
url('/static/fonts/Helvetica/HelveticaNowDisplay-Bold-1.0.woff2') format('woff2');
font-weight: 700;
font-style: normal;
font-display: swap;
}
</style>
<meta content='Blog' name='meta-docsearch-hierarchy1'>
<meta content='Quick and Dirty vs. Polished and Perfect: The Two Sides of Engineering' name='meta-docsearch-hierarchy2'>
<meta content='Quick and Dirty vs. Polished and Perfect: The Two Sides of Engineering' name='meta-docsearch-name'>
<meta content='Quick and Dirty vs. Polished and Perfect: The Two Sides of Engineering' name='meta-docsearch-title'>
<meta content='Every great engineer knows how to toggle between two fundamentally different, yet equally important styles of work: &quot;Let&#39;s wing it&quot; hacking and corporate-level &quot;measure twice, cut once&quot; engineering.' name='meta-docsearch-description'>
<meta content='' name='meta-docsearch-og_description'>
<meta content='Juraj Masar' name='meta-docsearch-authors'>
<meta content='100' name='meta-docsearch-pagerank'>
</head>
<body>
<script type="application/javascript" nonce="104a4819783f5b4496acc93bf75e047e">
//<![CDATA[
window.cfg = {"base_host":"betterstack.com","base_url":"https://betterstack.com","better_stack_url":"https://betterstack.com","uptime_url":"https://uptime.betterstack.com","logtail_url":"https://telemetry.betterstack.com","errors_url":"https://errors.betterstack.com","aisre_url":"https://chat.betterstack.com","rum_url":"https://rum.betterstack.com","cloud_url":"https://cloud.betterstack.com","warehouse_url":"https://warehouse.betterstack.com","controller":"articles","action":"show","app":"betterstack","environment":"production","app_version":"8d25e6a961ddaeae351be8c892b5d08730719ee4"};
//]]>
</script>
<div class='main articles bg-[#0B0C14]'>
<header class='z-40 top-0 left-0 right-0 flex justify-center helvetica bg-[#0B0C14]/80 relative before:absolute before:-z-10 before:inset-0 before:backdrop-blur-2xl' data-controller='header' id='navbar'>
<nav class='grow flex justify-between border-b mx-5 max-w-[1110px] h-[52px] text-[13px] leading-[100%] text-[#C9D3EE] border-[#727DA1]/15'>
<div class='flex items-stretch gap-3'>
<a aria-label='Go to homepage' class='flex items-center py-3' href='/'>
<svg width='154' height='21' class='scale-[65%] -mx-6' alt='Better Stack' style='--currentColor: currentColor;'><use href='/assets/v2/better-stack-logo-f5a76de1.svg#root' /></svg>
</a>
<div class='hidden md:flex items-stretch gap-4'>
<button aria-controls='platform-menu' aria-haspopup='menu' class='pl-3 py-3 pr-6 -mr-3 group relative flex items-center'>
<div class='transition group-hover:text-white'>Platform</div>
<span class='absolute right-2 text-[#656A7B]'><svg class='group-hover:rotate-180 transition w-[11px] h-[11px] inline' style='--currentColor: currentColor;stroke-width:3.2727;'><use href='/assets/icons/heroicons_v2/outline/chevron-down-d602e268.svg#root' /></svg></span>
<div class='hidden group-hover:block absolute z-40 top-full left-0 text-left' id='platform-menu' role='menu' tabindex='-1'>
<div class='rounded-lg border backdrop-blur-2xl flex w-[667px] min-[1100px]:w-[950px] xl:w-[1005px] bg-[#181926]/80 border-[#1F2433]/75'>
<div class='grid md:grid-cols-2 w-full min-[1100px]:grid-cols-3'>
<div class='flex-1 py-3 flex flex-col gap-1 border-b md:border-r relative md:pl-[17px] md:pr-[17px] border-[#727DA112] min-[1100px]:border-b-0'>
<a class="block px-2 flex gap-2 transition py-[10px] hover:bg-[#727DA1]/15 rounded leading-[145%]" href="/ai-sre"><span class='text-[#7C87F7]'><svg width='25' height='24' alt='' class='scale-[85%]' style='--currentColor: currentColor;'><use href='/assets/v2/ai-sre-9ed692c8.svg#root' /></svg></span>
<div>
<div class='font-medium'>AI SRE</div>
<div class='mt-1 text-xs text-neutral-200'>Agentic root cause analysis</div>
</div>
</a>
<a class="block px-2 flex gap-2 transition py-[10px] hover:bg-[#727DA1]/15 rounded leading-[145%]" href="/incident-management"><span class='text-[#7C87F7]'><svg width='25' height='24' alt='' class='relative top-[-2px] scale-[90%]' style='--currentColor: currentColor;'><use href='/assets/v2/calendar-f8fa6928.svg#root' /></svg></span>
<div>
<div class='font-medium'>Incident management &amp; on-call</div>
<div class='mt-1 text-xs text-neutral-200'>Move fast when things break</div>
</div>
</a>
<a class="block px-2 flex gap-2 transition py-[10px] hover:bg-[#727DA1]/15 rounded leading-[145%]" href="/status-page"><span class='text-[#7C87F7]'><svg width='25' height='24' alt='' class='relative top-[-1px] left-[2px]' style='--currentColor: currentColor;'><use href='/assets/v2/page-a4cac846.svg#root' /></svg></span>
<div>
<div class='font-medium'>Status page</div>
<div class='mt-1 text-xs text-neutral-200'>Communicate downtime &amp; build trust</div>
</div>
</a>
</div>
<div class='flex-1 py-3 flex flex-col gap-1 border-b relative md:pl-[17px] md:pr-[17px] border-[#727DA112] min-[1100px]:border-b-0 min-[1100px]:border-r'>
<a class="block px-2 flex gap-2 transition py-[10px] hover:bg-[#727DA1]/15 rounded leading-[145%]" href="/tracing"><span class='text-[#7C87F7]'><svg width='25' height='24' alt='' class='relative' style='--currentColor: currentColor;'><use href='/assets/v2/telescope-bf9dc2b9.svg#root' /></svg></span>
<div>
<div class='font-medium'>Tracing</div>
<div class='mt-1 text-xs text-neutral-200'>eBPF-based OpenTelemetry-native tracing</div>
</div>
</a>
<a class="block px-2 flex gap-2 transition py-[10px] hover:bg-[#727DA1]/15 rounded leading-[145%]" href="/log-management"><span class='text-[#7C87F7]'><svg width='25' height='24' alt='' class='relative top-[-2px] scale-[90%]' style='--currentColor: currentColor;'><use href='/assets/v2/code-insert-dbc41857.svg#root' /></svg></span>
<div>
<div class='font-medium'>Log management</div>
<div class='mt-1 text-xs text-neutral-200'>Collect insights across your stack</div>
</div>
</a>
<a class="block px-2 flex gap-2 transition py-[10px] hover:bg-[#727DA1]/15 rounded leading-[145%]" href="/infrastructure-monitoring"><span class='text-[#7C87F7]'><svg width='25' height='24' alt='' class='relative scale-[90%]' style='--currentColor: currentColor;'><use href='/assets/v2/server-f03364f4.svg#root' /></svg></span>
<div>
<div class='font-medium'>Infrastructure monitoring</div>
<div class='mt-1 text-xs text-neutral-200'>OpenTelemetry-native infrastructure monitoring</div>
</div>
</a>
</div>
<div class='flex-1 mt-2 md:mt-0 py-3 flex flex-col gap-1 md:pl-[17px] md:pr-5'>
<a class="block px-2 flex gap-2 transition py-[10px] hover:bg-[#727DA1]/15 rounded leading-[145%]" href="/uptime"><span class='text-[#7C87F7]'><svg width='25' height='24' alt='' class='relative top-[-2px] scale-[90%]' style='--currentColor: currentColor;'><use href='/assets/v2/radar-4182d855.svg#root' /></svg></span>
<div>
<div class='font-medium'>Uptime monitoring</div>
<div class='mt-1 text-xs text-neutral-200'>The most reliable uptime monitoring</div>
</div>
</a>
<a class="block px-2 flex gap-2 transition py-[10px] hover:bg-[#727DA1]/15 rounded leading-[145%]" href="/real-user-monitoring"><span class='text-[#7C87F7]'><svg width='25' height='24' alt='' class='relative' style='--currentColor: currentColor;'><use href='/assets/v2/rum-dbe53d43.svg#root' /></svg></span>
<div>
<div class='font-medium'>Real user monitoring</div>
<div class='mt-1 text-xs text-neutral-200'>Session replay, web vitals &amp; product analytics</div>
</div>
</a>
<a class="block px-2 flex gap-2 transition py-[10px] hover:bg-[#727DA1]/15 rounded leading-[145%]" href="/error-tracking"><span class='text-[#7C87F7]'><svg width='25' height='24' alt='' class='relative scale-[75%] top-px left-px' style='--currentColor: currentColor;'><use href='/assets/v2/exclamation-circle-de67a698.svg#root' /></svg></span>
<div>
<div class='font-medium'>Error tracking</div>
<div class='mt-1 text-xs text-neutral-200'>AI‑native error tracking built on Better Stack</div>
</div>
</a>
</div>
</div>
</div>
</div>
</button>
<a class='hidden lg:flex p-3 hover:text-white transition items-center' href='https://betterstack.com/docs/'>
<span>Documentation</span>
</a>
<a class='hidden lg:flex p-3 hover:text-white transition items-center' href='/pricing'>
<span>Pricing</span>
</a>
<form action='https://betterstack.com/community' class='m-0 flex items-stretch'>
<button aria-controls='community-menu' aria-haspopup='menu' class='p-3 group relative flex items-center' type='submit'>
<div class='transition group-hover:text-white'>Community</div>
<span class='absolute -right-1 text-[#656A7B]'><svg class='group-hover:rotate-180 transition w-[11px] h-[11px] inline' style='--currentColor: currentColor;stroke-width:3.2727;'><use href='/assets/icons/heroicons_v2/outline/chevron-down-d602e268.svg#root' /></svg></span>
<div class='hidden group-hover:block absolute z-40 top-full left-0 text-left' id='community-menu' role='menu' tabindex='-1'>
<div class='rounded-lg border backdrop-blur-2xl flex flex-col gap-1 w-[174px] p-[6px] bg-[#181926]/80 border-[#1F2433]/75'>
<a class="block px-2 flex items-center gap-2 transition py-[6px] hover:bg-[#727DA1]/15 rounded-[6px] leading-[145%] md:hidden" href="https://betterstack.com/community"><span class='text-neutral-200'><svg class='mx-[2px] w-4 h-4 inline' style='--currentColor: currentColor;'><use href='/assets/icons/heroicons_v2/solid/users-c09a1e92.svg#root' /></svg></span>
Community home
</a><a class="block px-2 flex items-center gap-2 transition py-[6px] hover:bg-[#727DA1]/15 rounded-[6px] leading-[145%]" href="https://betterstack.com/community/guides"><span class='text-neutral-200'><svg width='20' height='20' alt='' style='--currentColor: currentColor;'><use href='/assets/v2/guides-fa8300b6.svg#root' /></svg></span>
Guides
</a><a class="block px-2 flex items-center gap-2 transition py-[6px] hover:bg-[#727DA1]/15 rounded-[6px] leading-[145%]" href="https://betterstack.com/community/questions"><span class='text-neutral-200'><svg width='20' height='20' alt='' style='--currentColor: currentColor;'><use href='/assets/v2/questions-ae0ab73b.svg#root' /></svg></span>
Questions
</a><a class="block px-2 flex items-center gap-2 transition py-[6px] hover:bg-[#727DA1]/15 rounded-[6px] leading-[145%]" href="https://betterstack.com/community/comparisons"><span class='text-neutral-200'><svg width='20' height='20' alt='' style='--currentColor: currentColor;'><use href='/assets/v2/comparisons-e0f4ca1e.svg#root' /></svg></span>
Comparisons
</a>
</div>
</div>
</button>
</form>
<button aria-controls='company-menu' aria-haspopup='menu' class='p-3 group relative flex items-center'>
<div class='transition group-hover:text-white'>Company</div>
<span class='absolute -right-1 text-[#656A7B]'><svg class='group-hover:rotate-180 transition w-[11px] h-[11px] inline' style='--currentColor: currentColor;stroke-width:3.2727;'><use href='/assets/icons/heroicons_v2/outline/chevron-down-d602e268.svg#root' /></svg></span>
<div class='hidden group-hover:block absolute z-40 top-full left-0 text-left' id='company-menu' role='menu' tabindex='-1'>
<div class='rounded-lg border backdrop-blur-2xl flex flex-col gap-1 w-[190px] p-[6px] bg-[#181926]/80 border-[#1F2433]/75'>
<a class="block px-2 flex items-center gap-2 transition py-[6px] hover:bg-[#727DA1]/15 rounded-[6px] leading-[145%]" href="/careers"><span class='text-neutral-200'><svg width='20' height='20' alt='' style='--currentColor: currentColor;'><use href='/assets/v2/ship-38e68322.svg#root' /></svg></span>
Work at Better Stack
</a><a class="block px-2 flex items-center gap-2 transition py-[6px] hover:bg-[#727DA1]/15 rounded-[6px] leading-[145%]" href="/careers/engineering"><span class='text-neutral-200'><svg width='20' height='20' alt='' style='--currentColor: currentColor;'><use href='/assets/v2/code-05597a86.svg#root' /></svg></span>
Engineering
</a><a class="block px-2 flex items-center gap-2 transition py-[6px] hover:bg-[#727DA1]/15 rounded-[6px] leading-[145%]" href="/security"><span class='text-neutral-200'><svg width='20' height='20' alt='' class='w-5 h-5 inline' style='--currentColor: currentColor;'><use href='/assets/icons/heroicons_v2/solid/shield-check-f947ade1.svg#root' /></svg></span>
Security
</a><a class="block px-2 flex items-center gap-2 transition py-[6px] hover:bg-[#727DA1]/15 rounded-[6px] leading-[145%]" href="https://betterstack.com/community/blog"><span class='text-neutral-200'><svg width='20' height='20' alt='' style='--currentColor: currentColor;'><use href='/assets/v2/blog-0647ef17.svg#root' /></svg></span>
Blog
</a><a class="block px-2 flex items-center gap-2 transition py-[6px] hover:bg-[#727DA1]/15 rounded-[6px] leading-[145%]" href="https://betterstack.com/tag/changelog"><span class='text-neutral-200'><svg class='w-5 h-5 inline' style='--currentColor: currentColor;'><use href='/assets/icons/heroicons_v2/solid/newspaper-ea89647a.svg#root' /></svg></span>
Changelog
</a>
</div>
</div>
</button>
<a class='hidden lg:flex p-3 hover:text-white transition items-center' href='/enterprise'>
<span>Enterprise</span>
</a>
</div>
</div>
<div class='flex items-center sm:gap-2 whitespace-nowrap -mr-3 md:mr-0'>
<a class="p-2 transition hover:text-white" data-turbo="false" href="/users/sign-in">Sign in</a>
<a class="px-2 h-[27px] flex items-center rounded bg-button-gradient text-white font-medium" data-turbo="false" href="/users/sign-up">Sign up</a>
<button aria-label='Open menu' class='p-2 group relative md:hidden text-neutral-300' id='open-menu'>
<svg class='w-5 h-5 inline' style='--currentColor: currentColor;stroke-width:1.8;'><use href='/assets/icons/heroicons_v2/outline/bars-3-76c83e3d.svg#root' /></svg>
</button>
<button aria-label='Close menu' class='hidden p-2 group relative md:hidden text-neutral-300' id='close-menu'>
<svg class='w-5 h-5 inline' style='--currentColor: currentColor;stroke-width:1.8;'><use href='/assets/icons/heroicons_v2/outline/x-mark-0f864e39.svg#root' /></svg>
</button>
</div>
<div class='hidden md:hidden p-5 fixed z-40 left-0 right-0 backdrop-blur-2xl top-[52px] bg-[#181926]/80 text-[#C9D3EE] max-h-[calc(100dvh-52px)] overflow-y-scroll' id='mobile-menu'>
<div class='js-menu-section flex flex-col gap-1' data-section='root'>
<button class='p-3 group relative flex items-center' data-section='platform'>
Platform
<span class='text-[#656A7B]'><svg class='ml-[6px] w-[11px] h-[11px] inline' style='--currentColor: currentColor;stroke-width:3.2727;'><use href='/assets/icons/heroicons_v2/outline/chevron-right-72e32d8a.svg#root' /></svg></span>
</button>
<a class="p-3" href="https://betterstack.com/docs/">Documentation</a>
<a class="p-3" href="/pricing">Pricing</a>
<button class='p-3 group relative flex items-center' data-section='community'>
Community
<span class='text-[#656A7B]'><svg class='ml-[6px] w-[11px] h-[11px] inline' style='--currentColor: currentColor;stroke-width:3.2727;'><use href='/assets/icons/heroicons_v2/outline/chevron-right-72e32d8a.svg#root' /></svg></span>
</button>
<button class='p-3 group relative flex items-center' data-section='company'>
Company
<span class='text-[#656A7B]'><svg class='ml-[6px] w-[11px] h-[11px] inline' style='--currentColor: currentColor;stroke-width:3.2727;'><use href='/assets/icons/heroicons_v2/outline/chevron-right-72e32d8a.svg#root' /></svg></span>
</button>
<a class="p-3" href="/enterprise">Enterprise</a>
</div>
<div class='js-menu-section hidden' data-section='platform'>
<button class='mb-2 p-3 group relative flex items-center' data-section='root'>
<svg class='mr-[6px] w-[11px] h-[11px] inline' style='--currentColor: currentColor;stroke-width:3.2727;'><use href='/assets/icons/heroicons_v2/outline/chevron-left-1c3f2e01.svg#root' /></svg>
Back
</button>
<div class='grid md:grid-cols-2 w-full min-[1100px]:grid-cols-3'>
<div class='flex-1 py-3 flex flex-col gap-1 border-b md:border-r relative md:pl-[17px] md:pr-[17px] border-[#727DA112] min-[1100px]:border-b-0'>
<a class="block px-2 flex gap-2 transition py-[10px] hover:bg-[#727DA1]/15 rounded leading-[145%]" href="/ai-sre"><span class='text-[#7C87F7]'><svg width='25' height='24' alt='' class='scale-[85%]' style='--currentColor: currentColor;'><use href='/assets/v2/ai-sre-9ed692c8.svg#root' /></svg></span>
<div>
<div class='font-medium'>AI SRE</div>
<div class='mt-1 text-xs text-neutral-200'>Agentic root cause analysis</div>
</div>
</a>
<a class="block px-2 flex gap-2 transition py-[10px] hover:bg-[#727DA1]/15 rounded leading-[145%]" href="/incident-management"><span class='text-[#7C87F7]'><svg width='25' height='24' alt='' class='relative top-[-2px] scale-[90%]' style='--currentColor: currentColor;'><use href='/assets/v2/calendar-f8fa6928.svg#root' /></svg></span>
<div>
<div class='font-medium'>Incident management &amp; on-call</div>
<div class='mt-1 text-xs text-neutral-200'>Move fast when things break</div>
</div>
</a>
<a class="block px-2 flex gap-2 transition py-[10px] hover:bg-[#727DA1]/15 rounded leading-[145%]" href="/status-page"><span class='text-[#7C87F7]'><svg width='25' height='24' alt='' class='relative top-[-1px] left-[2px]' style='--currentColor: currentColor;'><use href='/assets/v2/page-a4cac846.svg#root' /></svg></span>
<div>
<div class='font-medium'>Status page</div>
<div class='mt-1 text-xs text-neutral-200'>Communicate downtime &amp; build trust</div>
</div>
</a>
</div>
<div class='flex-1 py-3 flex flex-col gap-1 border-b relative md:pl-[17px] md:pr-[17px] border-[#727DA112] min-[1100px]:border-b-0 min-[1100px]:border-r'>
<a class="block px-2 flex gap-2 transition py-[10px] hover:bg-[#727DA1]/15 rounded leading-[145%]" href="/tracing"><span class='text-[#7C87F7]'><svg width='25' height='24' alt='' class='relative' style='--currentColor: currentColor;'><use href='/assets/v2/telescope-bf9dc2b9.svg#root' /></svg></span>
<div>
<div class='font-medium'>Tracing</div>
<div class='mt-1 text-xs text-neutral-200'>eBPF-based OpenTelemetry-native tracing</div>
</div>
</a>
<a class="block px-2 flex gap-2 transition py-[10px] hover:bg-[#727DA1]/15 rounded leading-[145%]" href="/log-management"><span class='text-[#7C87F7]'><svg width='25' height='24' alt='' class='relative top-[-2px] scale-[90%]' style='--currentColor: currentColor;'><use href='/assets/v2/code-insert-dbc41857.svg#root' /></svg></span>
<div>
<div class='font-medium'>Log management</div>
<div class='mt-1 text-xs text-neutral-200'>Collect insights across your stack</div>
</div>
</a>
<a class="block px-2 flex gap-2 transition py-[10px] hover:bg-[#727DA1]/15 rounded leading-[145%]" href="/infrastructure-monitoring"><span class='text-[#7C87F7]'><svg width='25' height='24' alt='' class='relative scale-[90%]' style='--currentColor: currentColor;'><use href='/assets/v2/server-f03364f4.svg#root' /></svg></span>
<div>
<div class='font-medium'>Infrastructure monitoring</div>
<div class='mt-1 text-xs text-neutral-200'>OpenTelemetry-native infrastructure monitoring</div>
</div>
</a>
</div>
<div class='flex-1 mt-2 md:mt-0 py-3 flex flex-col gap-1 md:pl-[17px] md:pr-5'>
<a class="block px-2 flex gap-2 transition py-[10px] hover:bg-[#727DA1]/15 rounded leading-[145%]" href="/uptime"><span class='text-[#7C87F7]'><svg width='25' height='24' alt='' class='relative top-[-2px] scale-[90%]' style='--currentColor: currentColor;'><use href='/assets/v2/radar-4182d855.svg#root' /></svg></span>
<div>
<div class='font-medium'>Uptime monitoring</div>
<div class='mt-1 text-xs text-neutral-200'>The most reliable uptime monitoring</div>
</div>
</a>
<a class="block px-2 flex gap-2 transition py-[10px] hover:bg-[#727DA1]/15 rounded leading-[145%]" href="/real-user-monitoring"><span class='text-[#7C87F7]'><svg width='25' height='24' alt='' class='relative' style='--currentColor: currentColor;'><use href='/assets/v2/rum-dbe53d43.svg#root' /></svg></span>
<div>
<div class='font-medium'>Real user monitoring</div>
<div class='mt-1 text-xs text-neutral-200'>Session replay, web vitals &amp; product analytics</div>
</div>
</a>
<a class="block px-2 flex gap-2 transition py-[10px] hover:bg-[#727DA1]/15 rounded leading-[145%]" href="/error-tracking"><span class='text-[#7C87F7]'><svg width='25' height='24' alt='' class='relative scale-[75%] top-px left-px' style='--currentColor: currentColor;'><use href='/assets/v2/exclamation-circle-de67a698.svg#root' /></svg></span>
<div>
<div class='font-medium'>Error tracking</div>
<div class='mt-1 text-xs text-neutral-200'>AI‑native error tracking built on Better Stack</div>
</div>
</a>
</div>
</div>
</div>
<div class='js-menu-section hidden flex flex-col gap-1' data-section='community'>
<button class='mb-2 p-3 group relative flex items-center' data-section='root'>
<svg class='mr-[6px] w-[11px] h-[11px] inline' style='--currentColor: currentColor;stroke-width:3.2727;'><use href='/assets/icons/heroicons_v2/outline/chevron-left-1c3f2e01.svg#root' /></svg>
Back
</button>
<a class="block px-2 flex items-center gap-2 transition py-[6px] hover:bg-[#727DA1]/15 rounded-[6px] leading-[145%] md:hidden" href="https://betterstack.com/community"><span class='text-neutral-200'><svg class='mx-[2px] w-4 h-4 inline' style='--currentColor: currentColor;'><use href='/assets/icons/heroicons_v2/solid/users-c09a1e92.svg#root' /></svg></span>
Community home
</a><a class="block px-2 flex items-center gap-2 transition py-[6px] hover:bg-[#727DA1]/15 rounded-[6px] leading-[145%]" href="https://betterstack.com/community/guides"><span class='text-neutral-200'><svg width='20' height='20' alt='' style='--currentColor: currentColor;'><use href='/assets/v2/guides-fa8300b6.svg#root' /></svg></span>
Guides
</a><a class="block px-2 flex items-center gap-2 transition py-[6px] hover:bg-[#727DA1]/15 rounded-[6px] leading-[145%]" href="https://betterstack.com/community/questions"><span class='text-neutral-200'><svg width='20' height='20' alt='' style='--currentColor: currentColor;'><use href='/assets/v2/questions-ae0ab73b.svg#root' /></svg></span>
Questions
</a><a class="block px-2 flex items-center gap-2 transition py-[6px] hover:bg-[#727DA1]/15 rounded-[6px] leading-[145%]" href="https://betterstack.com/community/comparisons"><span class='text-neutral-200'><svg width='20' height='20' alt='' style='--currentColor: currentColor;'><use href='/assets/v2/comparisons-e0f4ca1e.svg#root' /></svg></span>
Comparisons
</a>
</div>
<div class='js-menu-section hidden pb-5 flex flex-col gap-1' data-section='company'>
<button class='mb-2 p-3 group relative flex items-center' data-section='root'>
<svg class='mr-[6px] w-[11px] h-[11px] inline' style='--currentColor: currentColor;stroke-width:3.2727;'><use href='/assets/icons/heroicons_v2/outline/chevron-left-1c3f2e01.svg#root' /></svg>
Back
</button>
<a class="block px-2 flex items-center gap-2 transition py-[6px] hover:bg-[#727DA1]/15 rounded-[6px] leading-[145%]" href="/careers"><span class='text-neutral-200'><svg width='20' height='20' alt='' style='--currentColor: currentColor;'><use href='/assets/v2/ship-38e68322.svg#root' /></svg></span>
Work at Better Stack
</a><a class="block px-2 flex items-center gap-2 transition py-[6px] hover:bg-[#727DA1]/15 rounded-[6px] leading-[145%]" href="/careers/engineering"><span class='text-neutral-200'><svg width='20' height='20' alt='' style='--currentColor: currentColor;'><use href='/assets/v2/code-05597a86.svg#root' /></svg></span>
Engineering
</a><a class="block px-2 flex items-center gap-2 transition py-[6px] hover:bg-[#727DA1]/15 rounded-[6px] leading-[145%]" href="/security"><span class='text-neutral-200'><svg width='20' height='20' alt='' class='w-5 h-5 inline' style='--currentColor: currentColor;'><use href='/assets/icons/heroicons_v2/solid/shield-check-f947ade1.svg#root' /></svg></span>
Security
</a><a class="block px-2 flex items-center gap-2 transition py-[6px] hover:bg-[#727DA1]/15 rounded-[6px] leading-[145%]" href="https://betterstack.com/community/blog"><span class='text-neutral-200'><svg width='20' height='20' alt='' style='--currentColor: currentColor;'><use href='/assets/v2/blog-0647ef17.svg#root' /></svg></span>
Blog
</a><a class="block px-2 flex items-center gap-2 transition py-[6px] hover:bg-[#727DA1]/15 rounded-[6px] leading-[145%]" href="https://betterstack.com/tag/changelog"><span class='text-neutral-200'><svg class='w-5 h-5 inline' style='--currentColor: currentColor;'><use href='/assets/icons/heroicons_v2/solid/newspaper-ea89647a.svg#root' /></svg></span>
Changelog
</a>
</div>
</div>
</nav>
</header>
<header class='dark sticky top-0 z-30 flex justify-center leading-none w-full backdrop-blur-2xl bg-[#0B0C14]/80 text-[13px]' data-controller='header'>
<div class='mx-2 flex grow relative max-w-[1110px] min-[650px]:mx-5 min-[650px]:overflow-x-scroll min-[650px]:no-scrollbars'>
<nav class='grow flex items-center border-b h-[49px] border-[#727DA1]/15'>
<div class='grow flex items-stretch gap-5 justify-between'>
<div class='relative group min-[650px]:hidden'>
<button aria-controls='article-menu' aria-haspopup='menu' class='pl-3 py-3 pr-6 -mr-3 relative flex items-center' id='article-menu-trigger'>
<div class='transition group-hover:text-white text-[#C9D3EE]'>
Blog
</div>
<span class='absolute right-2 text-[#656A7B]'>
<svg class='transition group-hover:rotate-180 group-data-open:rotate-180 w-[11px] h-[11px] inline' style='--currentColor: currentColor;stroke-width:3.2727;'><use href='/assets/icons/heroicons_v2/outline/chevron-down-d602e268.svg#root' /></svg>
</span>
</button>
<div class='hidden absolute z-40 left-0 text-left group-hover:block! top-[100%]' id='article-menu' role='menu' tabindex='-1'>
<div class='rounded-lg border backdrop-blur-2xl flex flex-col gap-1 w-[190px] p-[6px] bg-[#181926] border-[#1F2433]/75'>
<a class='block px-2 flex items-center transition hover:bg-[#727DA1]/15 py-[6px] rounded-[6px] leading-[145%]' href='/inside/work/?utm_content&amp;utm_medium=blog-community&amp;utm_source=community&amp;utm_term=two-sides'>
Work
</a>
<a class='block px-2 flex items-center transition hover:bg-[#727DA1]/15 py-[6px] rounded-[6px] leading-[145%]' href='/inside/engineering/?utm_content&amp;utm_medium=blog-community&amp;utm_source=community&amp;utm_term=two-sides'>
Engineering
</a>
<a class='block px-2 flex items-center transition hover:bg-[#727DA1]/15 py-[6px] bg-[#727DA1]/15 text-white rounded-[6px] leading-[145%]' href='/community/blog/?utm_content&amp;utm_medium=blog-community&amp;utm_source=community&amp;utm_term=two-sides'>
Blog
</a>
<a class='block px-2 flex items-center transition hover:bg-[#727DA1]/15 py-[6px] rounded-[6px] leading-[145%]' href='/inside/changelog/?utm_content&amp;utm_medium=blog-community&amp;utm_source=community&amp;utm_term=two-sides'>
Changelog
</a>
<a class='block px-2 flex items-center transition hover:bg-[#727DA1]/15 py-[6px] rounded-[6px] leading-[145%]' href='/inside/case-study/?utm_content&amp;utm_medium=blog-community&amp;utm_source=community&amp;utm_term=two-sides'>
Case studies
</a>
</div>
</div>
</div>
<ul class='hidden items-center gap-5 whitespace-nowrap min-[650px]:flex'>
<li class='flex relative dropdown-trigger hover:text-white'>
<a class='w-full p-2' href='/inside/work/?utm_content&amp;utm_medium=blog-community&amp;utm_source=community&amp;utm_term=two-sides'>
Work
</a>
</li>
<li class='flex relative dropdown-trigger hover:text-white'>
<a class='w-full p-2' href='/inside/engineering/?utm_content&amp;utm_medium=blog-community&amp;utm_source=community&amp;utm_term=two-sides'>
Engineering
</a>
</li>
<li class='flex relative dropdown-trigger hover:text-white'>
<a class='w-full p-2 text-white rounded bg-[#98A4F714]' href='/community/blog/?utm_content&amp;utm_medium=blog-community&amp;utm_source=community&amp;utm_term=two-sides'>
Blog
</a>
</li>
<li class='flex relative dropdown-trigger hover:text-white'>
<a class='w-full p-2' href='/inside/changelog/?utm_content&amp;utm_medium=blog-community&amp;utm_source=community&amp;utm_term=two-sides'>
Changelog
</a>
</li>
<li class='flex relative dropdown-trigger hover:text-white'>
<a class='w-full p-2' href='/inside/case-study/?utm_content&amp;utm_medium=blog-community&amp;utm_source=community&amp;utm_term=two-sides'>
Case studies
</a>
</li>
</ul>
<div class='sticky z-10 right-4 top-0 bottom-0 flex items-center gap-5 whitespace-nowrap md:absolute md:right-0'>
<a class='flex items-center hover:text-white md:hidden' href='https://betterstack.com/docs/'>Docs</a>
<a class='hover:text-white hidden md:block' href='https://betterstack.com/docs/'>Documentation</a>
<div class='flex items-center gap-x-2'>
<div aria-label='Theme switcher' class='flex items-center gap-0.5 bg-[#171A25] rounded-md p-0.5' data-controller='theme' role='group'>
<button aria-label='Light theme' class='flex items-center justify-center size-6 rounded-[5px] data-[active=true]:bg-elevation-2' data-action='click-&gt;theme#select' data-theme='light' data-theme-target='btn'>
<svg class='icon-secondary data-[active=true]:icon-primary size-3.5 inline' style='--currentColor: currentColor;stroke-width:2.5714;'><use href='/assets/icons/heroicons_v2/outline/sun-0d840de8.svg#root' /></svg>
</button>
<button aria-label='System theme' class='flex items-center justify-center size-6 rounded-[5px] data-[active=true]:bg-elevation-2' data-action='click-&gt;theme#select' data-theme='system' data-theme-target='btn'>
<svg class='size-3.5 icon-secondary data-[active=true]:icon-primary' style='--currentColor: currentColor;'><use href='/assets/icons/custom/system-theme-docs-ca18489c.svg#root' /></svg>
</button>
<button aria-label='Dark theme' class='flex items-center justify-center size-6 rounded-[5px] data-[active=true]:bg-elevation-2' data-action='click-&gt;theme#select' data-theme='dark' data-theme-target='btn'>
<svg class='icon-secondary data-[active=true]:icon-primary size-3.5 inline' style='--currentColor: currentColor;stroke-width:2.5714;'><use href='/assets/icons/heroicons_v2/outline/moon-e3058542.svg#root' /></svg>
</button>
</div>
<div id='docsearch-container'></div>
<script src='https://cdnjs.betterstack.com/@docsearch/js@3.5.2/dist/umd/index.js'></script>
<script nonce="104a4819783f5b4496acc93bf75e047e">
//<![CDATA[
function loadDocsearch() {
if (!window.docsearch) {
setTimeout(loadDocsearch, 50);
return;
}
window.docsearch({
container: '#docsearch-container',
appId: '4N04E5JBP3',
indexName: 'betterstack22',
apiKey: '1acd2b32f9173069cd6467c9d186e21f',
maxResultsPerGroup: 20,
searchParameters: {
hitsPerPage: 20,
},
});
// This hack prevents scrolling after closing the modal in Safari.
// https://github.com/algolia/docsearch/issues/1260
document.getElementsByClassName('DocSearch DocSearch-Button')[0]?.addEventListener('click', function (event) {
document.querySelectorAll('.js-docsearch-anchor').forEach((element) => {
element.parentNode.removeChild(element);
});
const input = document.createElement('input')
input.setAttribute('type', 'text')
const div = document.createElement('div');
div.appendChild(input);
div.classList.add('fixed', 'js-docsearch-anchor');
document.body.appendChild(div);
});
// Without this CMD+K would open one modal per visited page with the search.
// Docsearch does not support 'destroy', so we need to hack it.
document.addEventListener('keydown', function (event) {
if (event.key === 'k' && event.metaKey) {
event.stopPropagation();
event.preventDefault();
document.getElementsByClassName('DocSearch DocSearch-Button')[0]?.click();
}
});
}
loadDocsearch();
//]]>
</script>
</div>
</div>
</div>
</nav>
</div>
<div class='hidden absolute pointer-events-none top-0 bottom-0 right-0 bg-linear-to-l w-28 from-[#0B0C14] via-[#0B0C14] min-[650px]:block'></div>
</header>
<div class='bg-white dark:bg-[#0B0C14]'>
<main>
<div class='bg-secondary-hero dark:bg-primary-hero'>
<div class='mx-auto pt-4 pb-8 px-5 max-w-[1228px]'>
<div class='pt-10 md:pt-16 lg:pt-20'>
<h1 class='font-helveticaDisplay font-bold text-center text-neutral-850 dark:text-white overflow-hidden text-ellipsis mx-auto text-[36px] md:text-[48px] lg:text-[54px] leading-[120%] max-w-[640px]'>
Quick and Dirty vs. Polished and Perfect: The Two Sides of Engineering
</h1>
<div class='mt-4 flex justify-center text-base'>
</div>
<div class='mt-10 md:mt-16 mt-20 text-center text-neutral-850 dark:text-white'>
Juraj Masar
<div class='mt-1 uppercase whitespace-nowrap text-xs font-medium tracking-[1.56px]'>
Updated on October 13, 2023
</div>
</div>
</div>
</div>
</div>
<div class='container mx-auto py-6 sm:py-12 xl:py-16 max-w-[1130px]'>
<div class='lg:flex' data-controller='toc'>
<div class='grow xl:flex'>
<div class='grow prose mx-auto xl:mt-0 max-w-[616px]' data-controller='body' data-toc-target='content'>
<p><div data-controller='lightbox' class='relative cursor-pointer'>
<figure data-action='click->lightbox#open' data-lightbox-target='picture'>
<picture>
<source media="(max-width: 800px)" data-srcset="https://imagedelivery.net/xZXo0QFi-1_4Zimer-T0XQ/bdbc21cb-a7b6-40ef-28ef-aeff359f0d00/md1x 1x, https://imagedelivery.net/xZXo0QFi-1_4Zimer-T0XQ/bdbc21cb-a7b6-40ef-28ef-aeff359f0d00/md2x 2x" width=500 height=281 />
<source media="(min-width: 801px)" data-srcset="https://imagedelivery.net/xZXo0QFi-1_4Zimer-T0XQ/bdbc21cb-a7b6-40ef-28ef-aeff359f0d00/lg1x 1x, https://imagedelivery.net/xZXo0QFi-1_4Zimer-T0XQ/bdbc21cb-a7b6-40ef-28ef-aeff359f0d00/lg2x 2x" width=650 height=365 />
<img alt="maxresdefault.jpg" width="1280" height="720" class="w-full lazyload" data-src="https://imagedelivery.net/xZXo0QFi-1_4Zimer-T0XQ/bdbc21cb-a7b6-40ef-28ef-aeff359f0d00/orig" src="" />
</picture>
</figure>
<figure class='hidden lightbox' data-lightbox-target='container'>
<img alt="maxresdefault.jpg" width="1280" height="720" loading="lazy" data-action="click-&gt;lightbox#close" data-lightbox-target="img" src="https://imagedelivery.net/xZXo0QFi-1_4Zimer-T0XQ/bdbc21cb-a7b6-40ef-28ef-aeff359f0d00/orig" />
</figure>
</div>
</p><p><strong>Every great engineer knows how to toggle between two fundamentally different, yet equally important styles of work: &quot;Let&#39;s wing it&quot; hacking and corporate-level &quot;measure twice, cut once&quot; engineering.</strong></p><p>As more people hop onto the software engineering bandwagon just for the paycheck and lifestyle perks rather than a true-bread love for technology, certain contrasts between the &quot;tech virtuosos&quot; and the &quot;clock punchers&quot; start to stand out.</p><p>One such distinction is knowing when to flip the switch between the two engineering approaches.</p><p>Here&#39;s the scoop: <strong>Traditional paths like universities, internships, and work experiences at mega-tech companies usually only teach engineers the ways of &quot;polished and perfect engineering&quot;.</strong></p>
<ol>
<li>Don&#39;t mess things up!</li>
<li>You have to be a team player. Stick to a common code style, whip up unit tests, and give your code some good documentation.</li>
<li>Your code should be a breeze to maintain and enhance.</li>
<li>Long-winded commits and pull request messages? Bring &#39;em on.</li>
</ol>
<p><strong>But if programming is your hobby, chances are, you love playing around with the latest tech.</strong> You might find yourself churning out 50-100 line scripts just to test that shiny new API. Or maybe to scrape a list of rentals to snag the perfect apartment... or score the best car deal.</p><p>These are throwaway scripts that probably won&#39;t see the light of day again.</p><p><strong>That&#39;s why many self-taught coding enthusiasts often resort to a patchwork approach to make things work... and fast.</strong></p><p><strong>There&#39;s a common misbelief that the &quot;polished and perfect&quot; style of engineering is always superior. But it&#39;s not.</strong> Tests for code that&#39;s gonna gather dust in some corner are just a waste of your time. Staging environments for pre-release software? That’s ridiculous.</p><p>If you&#39;re an engineer at an early-stage startup, being able to prototype is a golden skill.</p><p><strong>What really sinks startups isn&#39;t ugly code.</strong> It&#39;s the failure to create something people are willing to pay for. That&#39;s why being able to prototype quickly, especially in the early stages, is super important.</p><p><strong>The crème de la crème of engineers can do both:</strong> whip up quick and dirty prototypes, validate their concepts at breakneck speed, and then spin those ideas into top-notch production code.</p>
<iframe class="aspect-video h-auto" width="100%" height="315" src="https://www.youtube.com/embed/76J3mHnHHOE?si=zsmhuzI4qEExhiyz" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p><div>
<a class='not-prose block my-8 p-9 rounded-lg text-13 bg-uptime-ad md:h-[254px] no-underline!' href='/uptime?utm_content=upsell&amp;utm_medium=blog-community&amp;utm_source=community&amp;utm_term=two-sides'>
<p class='inline-block font-bold ad-title-text text-transparent text-app-display-large'>
We call when your
<br>
website goes down
</p>
<p class='mt-2 max-w-[235px] text-[#C9D3EE]'>Get notified with a radically better infrastructure monitoring platform.</p>
<button class='mt-5 inline-block px-3 py-2 bg-neutral-700 rounded font-medium text-white bg-deprecated-primary-100 border border-deprecated-primary-200 leading-none whitespace-nowrap'>
Explore more
</button>
</a>
</div>
</p>
<article class='callout flex py-[13px] pl-4 pr-5 my-8 rounded-lg border text-brand-primary-200 dark:text-brand-primary-100 marker:text-brand-primary-200 border-[#BECCFB]/80 dark:border-brand-primary-100/30 bg-brand-primary-100/10'>
<div class='shrink-0 not-prose mr-3 -mt-1'><svg class='text-brand-primary-200 dark:text-brand-primary-100 w-4 h-4 inline' style='--currentColor: currentColor;'><use href='/assets/icons/heroicons_v2/mini/information-circle-fbffd64b.svg#root' /></svg></div>
<div class='content'><p>Originally posted on the <a rel="" target="_blank" class="" href="https://juraj.blog/p/two-sides">Early-stage Startup Engineering<span class="whitespace-nowrap"><svg class='relative -top-[1px] ml-1 w-4 h-4 inline' style='--currentColor: currentColor;'><use href='/assets/icons/heroicons_v2/mini/arrow-top-right-on-square-22902095.svg#root' /></svg></span></a> blog by Juraj Masar, Co-founder &amp; CEO at <a rel="" target="" class="" href="https://betterstack.com/?utm_content=callout&amp;utm_medium=blog-community&amp;utm_source=community&amp;utm_term=two-sides">Better Stack</a>.</p></div>
</article>
<div class='docsearch-ignore'>
<div class='mt-11 text-center'>
<div class='text-secondary mt-6'>
Got an article suggestion?
<a class="underline! text-secondary!" href="mailto:hello@betterstack.com?subject=Suggestion%20for%20Quick%20and%20Dirty%20vs.%20Polished%20and%20Perfect%3A%20The%20Two%20Sides%20of%20Engineering&amp;body=">Let us know</a>
</div>
<div class='flex justify-center items-center space-x-3 mt-4'>
<a href='https://twitter.com/share?ref_src=twsrc%5Etfw&amp;url=https://betterstack.com/community/blog/two-sides/&amp;text=Quick+and+Dirty+vs.+Polished+and+Perfect%3A+The+Two+Sides+of+Engineering+%7C+Better+Stack&amp;via=betterstackhq' rel='nofollow noopener' target='_blank'>
<svg width='16' height='16' alt='Share on Twitter' class='rounded-none! m-0!' style='--currentColor: currentColor;'><use href='/assets/articles/icons/twitter-47698571.svg#root' /></svg>
</a>
<a href='https://www.facebook.com/sharer/sharer.php?u=https://betterstack.com/community/blog/two-sides/' rel='nofollow noopener' target='_blank'>
<svg width='16' height='16' alt='Share on Facebook' class='rounded-none! m-0!' style='--currentColor: currentColor;'><use href='/assets/articles/icons/facebook-901b4e3f.svg#root' /></svg>
</a>
<a href='mailto:?subject=Quick%20and%20Dirty%20vs.%20Polished%20and%20Perfect%3A%20The%20Two%20Sides%20of%20Engineering&amp;body=https%3A%2F%2Fbetterstack.com%2Fcommunity%2Fblog%2Ftwo-sides%2F'>
<svg width='16' height='16' alt='Share via e-mail' class='rounded-none! m-0!' style='--currentColor: currentColor;'><use href='/assets/articles/icons/mail-0ac83b4d.svg#root' /></svg>
</a>
</div>
</div>
<div class='mt-24 flex flex-col items-center'>
<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' rel='nofollow noopener' target='_blank'>
<img alt="Licensed under CC-BY-NC-SA" class="m-0 lazyload" width="89" height="31" data-src="https://betterstack.com/assets/articles/cc-by-nc-sa-198c1f75.png" src="" />
</a>
<p class='mt-5 text-center text-secondary max-w-[365px]'>This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
</div>
<div class='dark'>
<nav class='bg-white text-base border-t dark:bg-[#0B0C14] border-neutral-300/10 text-[#363D4E] dark:text-neutral-200'>
<div class='mx-auto px-5 md:px-10 pt-8 max-lg:pb-8 lg:pt-14 md:flex max-w-[1110px]'>
<div class='flex-2 lg:grow flex gap-5'>
<div class='flex-1 lg:flex-2 flex flex-col lg:flex-row'>
<div class='lg:mr-12 flex-1 lg:min-w-[200px]'>
<div class='mb-12'>
<div class='font-medium text-black dark:text-white'>Solutions</div>
<a class="inline-block -mx-1 px-1 mt-3" href="/ai-sre">AI SRE</a>
<br>
<a class="inline-block -mx-1 px-1 mt-3" href="/tracing">OpenTelemetry tracing</a>
<br>
<a class="inline-block -mx-1 px-1 mt-3" href="/telemetry">Log management</a>
<br>
<a class="inline-block -mx-1 px-1 mt-3" href="/infrastructure-monitoring">Infrastructure monitoring</a>
<br>
<a class="inline-block -mx-1 px-1 mt-3" href="/error-tracking">Error tracking</a>
<br>
<a class="inline-block -mx-1 px-1 mt-3" href="/real-user-monitoring">Real user monitoring</a>
<br>
<a class="inline-block -mx-1 px-1 mt-3" href="/incident-management">Incident management</a>
<br>
<a class="inline-block -mx-1 px-1 mt-3" href="/uptime">Uptime monitoring</a>
<br>
<a class="inline-block -mx-1 px-1 mt-3" href="/status-page">Status page</a>
</div>
</div>
<div class='flex-1'>
<div class='mb-12 lg:hidden'>
<div class='font-medium text-black dark:text-white'>Company</div>
<a class="inline-block -mx-1 px-1 mt-3" href="/careers">Work at Better Stack</a>
<br class='lg:hidden'>
<a class="inline-block -mx-1 px-1 mt-3" href="/careers/engineering">Engineering</a>
<br class='lg:hidden'>
<a class="inline-block -mx-1 px-1 mt-3" href="/security">Security</a>
</div>
<div class='mb-12 hidden lg:block'>
<div class='font-medium text-black dark:text-white'>Resources</div>
<a class="inline-block -mx-1 px-1 mt-3 whitespace-nowrap" href="/help">Help &amp; Support</a>
<br>
<a class="inline-block -mx-1 px-1 mt-3" href="https://betterstack.com/docs/">Documentation</a>
<br>
<a class="inline-block -mx-1 px-1 mt-3" href="/enterprise">Enterprise</a>
<br>
<a class="inline-block -mx-1 px-1 mt-3" href="/integrations">Integrations</a>
<br>
<a class="inline-block -mx-1 px-1 mt-3" href="/dashboards">Dashboards</a>
</div>
</div>
</div>
<div class='lg:ml-12 flex-1 flex flex-col'>
<div class='mb-12 hidden lg:flex flex-col items-start lg:min-w-[200px]'>
<div class='font-medium text-black dark:text-white'>Company</div>
<a class="inline-block -mx-1 px-1 mt-3" href="/careers">Work at Better Stack</a>
<br class='lg:hidden'>
<a class="inline-block -mx-1 px-1 mt-3" href="/careers/engineering">Engineering</a>
<br class='lg:hidden'>
<a class="inline-block -mx-1 px-1 mt-3" href="/security">Security</a>
</div>
<div class='mb-12 lg:hidden'>
<div class='font-medium text-black dark:text-white'>Resources</div>
<a class="inline-block -mx-1 px-1 mt-3 whitespace-nowrap" href="/help">Help &amp; Support</a>
<br>
<a class="inline-block -mx-1 px-1 mt-3" href="https://betterstack.com/docs/">Documentation</a>
<br>
<a class="inline-block -mx-1 px-1 mt-3" href="/enterprise">Enterprise</a>
<br>
<a class="inline-block -mx-1 px-1 mt-3" href="/integrations">Integrations</a>
<br>
<a class="inline-block -mx-1 px-1 mt-3" href="/dashboards">Dashboards</a>
</div>
</div>
</div>
<div class='md:ml-12 flex-1 flex flex-col items-start grow max-w-[450px]'>
<div class='md:mb-12'>
<div class='font-medium text-black dark:text-white'>Community</div>
<a class="inline-block -mx-1 px-1 mt-4" href="https://betterstack.com/community/guides/incident-management/what-is-incident-management/">What Is Incident Management? Beginner’s Guide</a>
<a class="inline-block -mx-1 px-1 mt-4" href="https://betterstack.com/community/comparisons/datadog-log-management-alternatives/">Best Datadog Alternatives to Consider in 2026</a>
<a class="inline-block -mx-1 px-1 mt-4" href="https://betterstack.com/community/comparisons/free-status-page-tools/">8 Best Free &amp; Open Source Status Page Tools in 2026</a>
<a class="inline-block -mx-1 px-1 mt-4" href="https://betterstack.com/community/comparisons/sentry-alternatives/">13 Best Sentry Alternatives in 2026</a>
<a class="inline-block -mx-1 px-1 mt-4" href="https://betterstack.com/community/comparisons/grafana-alternatives/">15 Best Grafana Alternatives in 2026</a>
<a class="inline-block -mx-1 px-1 mt-4" href="https://betterstack.com/community/comparisons/incident-io-alternative/">The 10 Best Incident.io Alternatives in 2026</a>
<a class="inline-block -mx-1 px-1 mt-4" href="https://betterstack.com/community/comparisons/incident-management-tools/">5 Most Used Incident Management Tools</a>
</div>
</div>
</div>
</nav>
<footer class='bg-[#F3F4F7] dark:bg-[#0B0C14]'>
<div class='mx-auto text-base lg:px-5 max-w-[1110px] text-[#363D4E] dark:text-neutral-200'>
<div class='px-5 lg:px-2 lg:mx-3 pt-7 flex flex-col lg:flex-row justify-between items-center lg:items-end border-t border-neutral-300/10'>
<div>
<svg width='154' height='21' alt='' class='text-black dark:text-white scale-75 lg:scale-100' style='--currentColor: currentColor;'><use href='/assets/v2/better-stack-logo-f5a76de1.svg#root' /></svg>
<p class='mt-3 hidden lg:block max-w-[342px]'>
30x cheaper than Datadog. Predictable pricing. Exceptional customer support.
</p>
</div>
<div class='flex items-center gap-6 whitespace-nowrap'>
<a class="hidden lg:block -mx-1 px-1" href="tel:+1 (628) 900-3830">+1 (628) 900-3830</a>
<a class="hidden lg:block -mx-1 px-1" href="mailto:hello@betterstack.com">hello@betterstack.com</a>
<div class='hidden lg:block h-4 border-l border-neutral-300/10'></div>
<div class='hidden lg:flex'><div class='flex gap-4 text-neutral-300'>
<a aria-label='Better Stack on Instagram' href='https://www.instagram.com/betterstackhq/' rel='nofollow noopener' target='_blank'><svg width='16' height='17' style='--currentColor: currentColor;'><use href='/assets/v2/instagram-d9614e51.svg#root' /></svg></a>
<a aria-label='Better Stack on TikTok' href='https://www.tiktok.com/@betterstack' rel='nofollow noopener' target='_blank'><svg width='16' height='17' style='--currentColor: currentColor;'><use href='/assets/v2/tiktok-ad9068a9.svg#root' /></svg></a>
<a aria-label='Better Stack on LinkedIn' href='https://www.linkedin.com/company/betterstack' rel='nofollow noopener' target='_blank'><svg width='16' height='17' style='--currentColor: currentColor;'><use href='/assets/v2/linkedin-143ab64c.svg#root' /></svg></a>
<a aria-label='Better Stack on Twitter' href='https://twitter.com/betterstackhq' rel='nofollow noopener' target='_blank'><svg width='16' height='16' style='--currentColor: currentColor;'><use href='/assets/v2/twitter-4512e356.svg#root' /></svg></a>
<a aria-label='Better Stack on Github' href='https://github.com/BetterStackHQ/' rel='nofollow noopener' target='_blank'><svg width='16' height='17' style='--currentColor: currentColor;'><use href='/assets/v2/github-8e0718fe.svg#root' /></svg></a>
<a aria-label='Better Stack on YouTube' href='https://www.youtube.com/@betterstack' rel='nofollow noopener' target='_blank'><svg width='22' height='17' style='--currentColor: currentColor;'><use href='/assets/v2/youtube-72dade15.svg#root' /></svg></a>
</div>
</div>
</div>
</div>
<div class='px-5 lg:px-2 lg:mx-3 mt-5 py-3 lg:border-t flex flex-col lg:flex-row justify-between items-center border-neutral-300/10 text-[12px] leading-[18px]'>
<div class='flex items-center gap-6 whitespace-nowrap dark:text-neutral-300'>
<a class="-mx-1 px-1" href="/terms">Terms of Use</a>
<a class="-mx-1 px-1" href="/privacy">Privacy Policy</a>
<a class="-mx-1 px-1" href="/dpa">GDPR</a>
<a class='hidden sm:block -mx-1 px-1' href='https://status.betterstack.com/' target='_blank'>
<svg width='14' height='15' alt='All services are up' class='mr-1 hidden lg:inline' style='--currentColor: currentColor;'><use href='/assets/v2/status-green-4e79760e.svg#root' /></svg>
System status
</a>
</div>
<div class='mt-8 mb-2 flex lg:hidden'><div class='flex gap-4 text-neutral-300'>
<a aria-label='Better Stack on Instagram' href='https://www.instagram.com/betterstackhq/' rel='nofollow noopener' target='_blank'><svg width='16' height='17' style='--currentColor: currentColor;'><use href='/assets/v2/instagram-d9614e51.svg#root' /></svg></a>
<a aria-label='Better Stack on TikTok' href='https://www.tiktok.com/@betterstack' rel='nofollow noopener' target='_blank'><svg width='16' height='17' style='--currentColor: currentColor;'><use href='/assets/v2/tiktok-ad9068a9.svg#root' /></svg></a>
<a aria-label='Better Stack on LinkedIn' href='https://www.linkedin.com/company/betterstack' rel='nofollow noopener' target='_blank'><svg width='16' height='17' style='--currentColor: currentColor;'><use href='/assets/v2/linkedin-143ab64c.svg#root' /></svg></a>
<a aria-label='Better Stack on Twitter' href='https://twitter.com/betterstackhq' rel='nofollow noopener' target='_blank'><svg width='16' height='16' style='--currentColor: currentColor;'><use href='/assets/v2/twitter-4512e356.svg#root' /></svg></a>
<a aria-label='Better Stack on Github' href='https://github.com/BetterStackHQ/' rel='nofollow noopener' target='_blank'><svg width='16' height='17' style='--currentColor: currentColor;'><use href='/assets/v2/github-8e0718fe.svg#root' /></svg></a>
<a aria-label='Better Stack on YouTube' href='https://www.youtube.com/@betterstack' rel='nofollow noopener' target='_blank'><svg width='22' height='17' style='--currentColor: currentColor;'><use href='/assets/v2/youtube-72dade15.svg#root' /></svg></a>
</div>
</div>
<div class='flex items-center text-neutral-300'>
&copy; 2026 Better Stack, Inc.
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="root" fill="none" height="15" viewBox="0 0 14 15" width="14" class="ml-2 transition hover:-rotate-[15deg] hidden lg:inline"><mask id="a" fill="#000" height="14" maskUnits="userSpaceOnUse" width="14" x=".84082" y=".910156"><path d="m.84082.910156h14v14h-14z" fill="#fff"></path><path clip-rule="evenodd" d="m12.4541 1.91016h-4.37651v.54686h-.54823v.54771 1.85936 1.2038h-.54617v.54725h-.87535v.54642h-.87576v.54777h-.54616v.54551h-.0011-.54589-.54734v-.65488h-.54706v2.84474h.54616v.6549h.54824v.547h.54699v.4392.6557.5469.4376.0003h.65647v-.0003h.43765v-.4376h-.43765v-.5469h.43765v-.6557h.54706v-.5478h.65609v.5472h.43768v.1982h1.09412v-.4377h-.54709v-.8541h.54701v-.5472h.54712v-.87494h.54616v-1.86076h.65821v.43832h.547v-.54706h-.0011v-.43832h-1.20411v-1.2027h.65671v-1.09465h2.1892v-.0002h.5459v-2.40707h-.5459zm-9.41064 5.25148h-.54617v-1.20358h-.65647v3.50119h.54616v.43769h.65648zm7.22294-1.74985h1.6412v.54706h-1.6412zm-1.62526-2.63729h.00042v-.00005h.80045v.00013h.26677v1.06726h-.26682v-.00107h-.8004v-.26582h-.00042zm.26682.79945h.534v-.53268h-.534z" fill="#000" fill-rule="evenodd"></path></mask><path d="m8.07759 1.91016v-.952682h-.95268v.952682zm4.37651 0h.9527v-.952682h-.9527zm-4.37651.54686v.95268h.95268v-.95268zm-.54823 0v-.95268h-.95268v.95268zm0 3.61087v.95268h.95268v-.95268zm-.54617 0v-.95268h-.95267v.95268zm0 .54725v.95268h.95268v-.95268zm-.87535 0v-.95268h-.95267v.95268zm0 .54642v.95268h.95268v-.95268zm-.87576 0v-.95268h-.95268v.95268zm0 .54777v.95268h.95268v-.95268zm-.54616 0v-.95268h-.95268v.95268zm0 .54551v.95268h.95268v-.95268zm-1.09433 0h-.95268v.95268h.95268zm0-.65488h.95268v-.95268h-.95268zm-.54706 0v-.95268h-.95268v.95268zm0 2.84474h-.95268v.9527h.95268zm.54616 0h.95268v-.9527h-.95268zm0 .6549h-.95268v.9526h.95268zm.54824 0h.95268v-.9527h-.95268zm0 .547h-.95268v.9527h.95268zm.54699 0h.95268v-.9527h-.95268zm0 2.0797h-.95268v.9527h.95268zm.65647 0v.9527h.95268v-.9527zm0-.0003v-.9526h-.95268v.9526zm.43765 0v.9527h.95268v-.9527zm0-.4376h.95268v-.9527h-.95268zm-.43765 0h-.95268v.9527h.95268zm0-.5469v-.9527h-.95268v.9527zm.43765 0v.9527h.95268v-.9527zm0-.6557v-.9527h-.95268v.9527zm.54706 0v.9527h.95268v-.9527zm0-.5478v-.9526h-.95268v.9526zm.65609 0h.95268v-.9526h-.95268zm0 .5472h-.95267v.9527h.95267zm.43768 0h.95268v-.9527h-.95268zm0 .1982h-.95268v.9526h.95268zm1.09412 0v.9526h.95268v-.9526zm0-.4377h.95268v-.9527h-.95268zm-.54709 0h-.95267v.9527h.95267zm0-.8541v-.9527h-.95267v.9527zm.54701 0v.9527h.95268v-.9527zm0-.5472v-.9527h-.95268v.9527zm.54712 0v.9527h.95267v-.9527zm0-.87494v-.95267h-.95268v.95267zm.54616 0v.95264h.95271v-.95264zm0-1.86076v-.95268h-.95268v.95268zm.65821 0h.9527v-.95268h-.9527zm0 .43832h-.9527v.95268h.9527zm.547 0v.95268h.9527v-.95268zm0-.54706h.9527v-.95268h-.9527zm-.0011 0h-.95264v.95268h.95264zm0-.43832h.9527v-.95268h-.9527zm-1.20411 0h-.95268v.95268h.95268zm0-1.2027v-.95268h-.95268v.95268zm.65671 0v.95268h.9527v-.95268zm0-1.09465v-.95268h-.95267v.95268zm2.1892 0v.95267h.9527v-.95267zm0-.0002v-.95268h-.9527v.95268zm.5459 0v.95267h.9526v-.95267zm0-2.40707h.9526v-.95268h-.9526zm-.5459 0h-.9527v.95268h.9527zm-9.95681 4.70462h-.95268v.95268h.95268zm.54617 0h.95267v-.95268h-.95267zm-.54617-1.20358h.95268v-.95268h-.95268zm-.65647 0v-.95268h-.952678v.95268zm0 3.50119h-.952678v.95265h.952678zm.54616 0h.95268v-.95268h-.95268zm0 .43769h-.95268v.95266h.95268zm.65648 0v.95266h.95267v-.95266zm8.86414-4.48515h.9526v-.95268h-.9526zm-1.6412 0v-.95268h-.9527v.95268zm1.6412.54706v.95268h.9526v-.95268zm-1.6412 0h-.9527v.95268h.9527zm-1.62484-3.18435v.95268h.95268v-.95268zm-.00042 0v-.95268h-.95267v.95268zm.00042-.00005v-.95268h-.95268v.95268zm.80045 0h.95269v-.95268h-.95269zm0 .00013h-.95268v.95268h.95268zm.26677 0h.95272v-.95268h-.95272zm0 1.06726v.95268h.95272v-.95268zm-.26682 0h-.95268v.95268h.95268zm0-.00107h.95264v-.95268h-.95264zm-.8004 0h-.95268v.95267h.95268zm0-.26582h.95268v-.95268h-.95268zm-.00042 0h-.95267v.95268h.95267zm.26682-.001h-.95268v.95268h.95268zm.534 0v.95268h.95264v-.95268zm0-.53268h.95264v-.95268h-.95264zm-.534 0v-.95268h-.95268v.95268zm-.83037-.17844h4.37651v-1.905352h-4.37651zm.95268-.40581v-.54686h-1.90536v.54686zm-1.50091.95268h.54823v-1.90536h-.54823zm.95268-.40497v-.54771h-1.90536v.54771zm0 1.85936v-1.85936h-1.90536v1.85936zm0 1.2038v-1.2038h-1.90536v1.2038zm-1.49885.95268h.54617v-1.90536h-.54617zm.95268-.40543v-.54725h-1.90535v.54725zm-1.82803.95268h.87535v-1.90536h-.87535zm.95268-.40626v-.54642h-1.90535v.54642zm-1.82844.95268h.87576v-1.90536h-.87576zm.95268-.40491v-.54777h-1.90536v.54777zm-1.49884.95268h.54616v-1.90536h-.54616zm.95268-.40717v-.54551h-1.90536v.54551zm-.95378.95268h.0011v-1.90535h-.0011zm-.54589 0h.54589v-1.90535h-.54589zm-.54734 0h.54734v-1.90535h-.54734zm-.95268-1.60756v.65488h1.90536v-.65488zm.40562.95268h.54706v-1.90536h-.54706zm.95268 1.89206v-2.84474h-1.90536v2.84474zm-.40652-.9527h-.54616v1.9054h.54616zm.95268 1.6076v-.6549h-1.90536v.6549zm-.40444-.9527h-.54824v1.9053h.54824zm.95268 1.4997v-.547h-1.90536v.547zm-.40569-.9527h-.54699v1.9054h.54699zm.95268 1.3919v-.4392h-1.90536v.4392zm0 .6557v-.6557h-1.90536v.6557zm0 .5469v-.5469h-1.90536v.5469zm0 .4376v-.4376h-1.90536v.4376zm0 .0003v-.0003h-1.90536v.0003zm-.29621-.9526h-.65647v1.9053h.65647zm-.95268.9523v.0003h1.90536v-.0003zm1.39033-.9526h-.43765v1.9053h.43765zm-.95268.515v.4376h1.90536v-.4376zm.51503.9527h.43765v-1.9054h-.43765zm-.95268-1.4996v.5469h1.90536v-.5469zm1.39033-.9527h-.43765v1.9054h.43765zm-.95268.297v.6557h1.90536v-.6557zm1.49974-.9527h-.54706v1.9054h.54706zm-.95268.4049v.5478h1.90536v-.5478zm1.60877-.9526h-.65609v1.9053h.65609zm.95268 1.4998v-.5472h-1.90535v.5472zm-.515-.9527h-.43768v1.9054h.43768zm.95268 1.1509v-.1982h-1.90536v.1982zm.14144-.9527h-1.09412v1.9053h1.09412zm-.95268.515v.4377h1.90536v-.4377zm.40559.9527h.54709v-1.9054h-.54709zm-.95267-1.8068v.8541h1.90535v-.8541zm1.49968-.9527h-.54701v1.9054h.54701zm-.95268.4055v.5472h1.90536v-.5472zm1.4998-.9527h-.54712v1.9054h.54712zm-.95268.07776v.87494h1.90535v-.87494zm1.49884-.95267h-.54616v1.90531h.54616zm-.95268-.90809v1.86076h1.90539v-1.86076zm1.61089-.95268h-.65821v1.90536h.65821zm.9527 1.391v-.43832h-1.9054v.43832zm-.4057-.95268h-.547v1.90536h.547zm-.95264.40562v.54706h1.90534v-.54706zm.95154.95268h.0011v-1.90536h-.0011zm-.95264-1.391v.43832h1.90534v-.43832zm-.25147.95268h1.20411v-1.90536h-1.20411zm-.95268-2.15538v1.2027h1.90539v-1.2027zm1.60939-.95268h-.65671v1.90536h.65671zm-.95267-.14197v1.09465h1.90537v-1.09465zm3.14187-.95268h-2.1892v1.90535h2.1892zm-.9527.95248v.0002h1.9054v-.0002zm1.4986-.95268h-.5459v1.90535h.5459zm-.9527-1.45439v2.40707h1.9053v-2.40707zm.4068.95268h.5459v-1.90536h-.5459zm-.9527-1.49954v.54686h1.9054v-.54686zm-9.00411 6.20416h.54617v-1.90536h-.54617zm-.95268-2.15626v1.20358h1.90536v-1.20358zm.29621.95268h.65647v-1.90536h-.65647zm.95268 2.54851v-3.50119h-1.905358v3.50119zm-.40652-.95268h-.54616v1.90533h.54616zm.95268 1.39037v-.43769h-1.90536v.43769zm-.2962-.95268h-.65648v1.90534h.65648zm-.95268-1.78262v2.7353h1.90535v-2.7353zm9.81682-2.70253h-1.6412v1.90536h1.6412zm.9526 1.49974v-.54706h-1.9053v.54706zm-2.5938.95268h1.6412v-1.90536h-1.6412zm-.9527-1.49974v.54706h1.9054v-.54706zm-.67214-3.58997h-.00042v1.90536h.00042zm-.95268.95263v.00005h1.90536v-.00005zm1.75313-.95268h-.80045v1.90536h.80045zm.95269.95281v-.00013h-1.90537v.00013zm-.68592-.95268h-.26677v1.90536h.26677zm.95272 2.01994v-1.06726h-1.9054v1.06726zm-1.21954.95268h.26682v-1.90536h-.26682zm-.95268-.95375v.00107h1.90532v-.00107zm.95268-.95268h-.8004v1.90535h.8004zm.15228.95268v-.26582h-1.90536v.26582zm-.9531.68686h.00042v-1.90536h-.00042zm-.95267-1.75313v.80045h1.90535v-.80045zm1.21949 1.75213h.534v-1.90536h-.534zm-.41868-1.48536v.53268h1.90532v-.53268zm.41868.95268h.534v-1.90536h-.534zm.95268-.42v-.53268h-1.90536v.53268z" fill="#646e87" mask="url(#a)"></path></svg>
</div>
</div>
</div>
</footer>
</div>
</div>
<div class='hidden fixed bottom-8 inset-x-2 max-w-lg p-5 border rounded-lg backdrop-blur-xl z-[100000000] md:left-8 md:right-auto border-[#939DB81A] bg-[#0F101A]' id='cookie-consent-banner'>
<h3 class='font-semibold text-white leading-normal text-[13px] md:text-md'>Please accept cookies</h3>
<p class='mt-2 font-normal text-neutral-200 leading-normal text-[13px] md:text-md'>
We use cookies to authenticate users, improve the product user experience, and for
<a target="_blank" rel="nofollow noopener" class="border-0 transition text-brand-primary-100 hover:text-neutral-100 focus-visible -m-1 p-1" href="https://business.safety.google/privacy/">personalized ads</a>.
<a target="_blank" class="border-0 transition text-brand-primary-100 hover:text-neutral-100 focus-visible -m-1 p-1" href="/privacy">Learn more.</a>
</p>
<div class='mt-4 flex flex-row gap-3'>
<button class='bg-gray-900 px-2 font-medium text-neutral-200 rounded py-0.5 text-[13px] border border-[#939DB833] bg-[#171926]' id='cookie-deny'>Deny</button>
<button class='bg-gray-900 px-2 font-medium text-neutral-200 rounded py-0.5 text-[13px] border border-[#939DB833] bg-[#171926]' id='cookie-accept-required'>Accept required</button>
<button class='ml-auto px-2 font-medium text-white rounded bg-button-gradient py-0.5 text-[13px]' id='cookie-accept-all'>Accept all</button>
</div>
</div>
<script src='https://cdnjs.betterstack.com/prismjs@1.29.0/components/prism-core.min.js'></script>
<script src='https://cdnjs.betterstack.com/prismjs@1.29.0/plugins/autoloader/prism-autoloader.min.js'></script>
<script src='https://cdnjs.betterstack.com/prismjs@1.29.0/plugins/keep-markup/prism-keep-markup.min.js'></script>
<script nonce="104a4819783f5b4496acc93bf75e047e">
//<![CDATA[
if (window.Prism) {
Prism.hooks.add('before-sanity-check', function (env) {
if (env.element.querySelector('.token')) env.code = '';
});
}
//]]>
</script></body>
</html>