1696 lines
118 KiB
HTML
1696 lines
118 KiB
HTML
<!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: "Let's wing it" hacking and corporate-level "measure twice, cut once" 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: "Let's wing it" hacking and corporate-level "measure twice, cut once" 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: "Let's wing it" hacking and corporate-level "measure twice, cut once" 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: "Let's wing it" hacking and corporate-level "measure twice, cut once" 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 & 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 & 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 & 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 & 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 & 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 & 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&utm_medium=blog-community&utm_source=community&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&utm_medium=blog-community&utm_source=community&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&utm_medium=blog-community&utm_source=community&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&utm_medium=blog-community&utm_source=community&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&utm_medium=blog-community&utm_source=community&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&utm_medium=blog-community&utm_source=community&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&utm_medium=blog-community&utm_source=community&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&utm_medium=blog-community&utm_source=community&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&utm_medium=blog-community&utm_source=community&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&utm_medium=blog-community&utm_source=community&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->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->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->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->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: "Let's wing it" hacking and corporate-level "measure twice, cut once" 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 "tech virtuosos" and the "clock punchers" start to stand out.</p><p>One such distinction is knowing when to flip the switch between the two engineering approaches.</p><p>Here's the scoop: <strong>Traditional paths like universities, internships, and work experiences at mega-tech companies usually only teach engineers the ways of "polished and perfect engineering".</strong></p>
|
||
<ol>
|
||
<li>Don'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 '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't see the light of day again.</p><p><strong>That's why many self-taught coding enthusiasts often resort to a patchwork approach to make things work... and fast.</strong></p><p><strong>There's a common misbelief that the "polished and perfect" style of engineering is always superior. But it's not.</strong> Tests for code that'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're an engineer at an early-stage startup, being able to prototype is a golden skill.</p><p><strong>What really sinks startups isn't ugly code.</strong> It's the failure to create something people are willing to pay for. That'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&utm_medium=blog-community&utm_source=community&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 & CEO at <a rel="" target="" class="" href="https://betterstack.com/?utm_content=callout&utm_medium=blog-community&utm_source=community&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&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&url=https://betterstack.com/community/blog/two-sides/&text=Quick+and+Dirty+vs.+Polished+and+Perfect%3A+The+Two+Sides+of+Engineering+%7C+Better+Stack&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&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 & 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 & 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 & 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'>
|
||
© 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>
|