CINXE.COM

Procore Engineering Blog

<!DOCTYPE html> <html lang="en"> <head> <title>Procore Engineering Blog</title> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="HandheldFriendly" content="True" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="preload" as="style" href="https://engineering.procore.com/assets/built/screen.css?v=a76aff63a3" /> <link rel="preload" as="script" href="https://engineering.procore.com/assets/built/casper.js?v=a76aff63a3" /> <link rel="stylesheet" type="text/css" href="https://engineering.procore.com/assets/built/screen.css?v=a76aff63a3" /> <link rel="canonical" href="https://engineering.procore.com/"> <meta name="referrer" content="no-referrer-when-downgrade"> <link rel="next" href="https://engineering.procore.com/page/2/"> <meta property="og:site_name" content="Procore Engineering Blog"> <meta property="og:type" content="website"> <meta property="og:title" content="Procore Engineering Blog"> <meta property="og:url" content="https://engineering.procore.com/"> <meta property="og:image" content="https://engineering.procore.com/content/images/size/w1200/2021/01/blog-header-background.jpg"> <meta property="article:publisher" content="https://www.facebook.com/procore.tech"> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:title" content="Procore Engineering Blog"> <meta name="twitter:url" content="https://engineering.procore.com/"> <meta name="twitter:image" content="https://engineering.procore.com/content/images/size/w1200/2021/01/blog-header-background.jpg"> <meta name="twitter:site" content="@procoretech"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="675"> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "WebSite", "publisher": { "@type": "Organization", "name": "Procore Engineering Blog", "url": "https://engineering.procore.com/", "logo": { "@type": "ImageObject", "url": "https://engineering.procore.com/content/images/2017/12/ProcoreEngineering_logo_fc_r_blog-1.png" } }, "url": "https://engineering.procore.com/", "name": "Procore Engineering Blog", "image": { "@type": "ImageObject", "url": "https://engineering.procore.com/content/images/size/w1200/2021/01/blog-header-background.jpg", "width": 1200, "height": 675 }, "mainEntityOfPage": "https://engineering.procore.com/" } </script> <meta name="generator" content="Ghost 5.113"> <link rel="alternate" type="application/rss+xml" title="Procore Engineering Blog" href="https://engineering.procore.com/rss/"> <script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.50/umd/portal.min.js" data-i18n="true" data-ghost="https://engineering.procore.com/" data-key="c62f753798f72f1a8c66b39510" data-api="https://procore-devblog.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script><style id="gh-members-styles">.gh-post-upgrade-cta-content, .gh-post-upgrade-cta { display: flex; flex-direction: column; align-items: center; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; text-align: center; width: 100%; color: #ffffff; font-size: 16px; } .gh-post-upgrade-cta-content { border-radius: 8px; padding: 40px 4vw; } .gh-post-upgrade-cta h2 { color: #ffffff; font-size: 28px; letter-spacing: -0.2px; margin: 0; padding: 0; } .gh-post-upgrade-cta p { margin: 20px 0 0; padding: 0; } .gh-post-upgrade-cta small { font-size: 16px; letter-spacing: -0.2px; } .gh-post-upgrade-cta a { color: #ffffff; cursor: pointer; font-weight: 500; box-shadow: none; text-decoration: underline; } .gh-post-upgrade-cta a:hover { color: #ffffff; opacity: 0.8; box-shadow: none; text-decoration: underline; } .gh-post-upgrade-cta a.gh-btn { display: block; background: #ffffff; text-decoration: none; margin: 28px 0 0; padding: 8px 18px; border-radius: 4px; font-size: 16px; font-weight: 600; } .gh-post-upgrade-cta a.gh-btn:hover { opacity: 0.92; }</style> <script defer src="https://cdn.jsdelivr.net/ghost/sodo-search@~1.5/umd/sodo-search.min.js" data-key="c62f753798f72f1a8c66b39510" data-styles="https://cdn.jsdelivr.net/ghost/sodo-search@~1.5/umd/main.css" data-sodo-search="https://procore-devblog.ghost.io/" data-locale="en" crossorigin="anonymous"></script> <link href="https://engineering.procore.com/webmentions/receive/" rel="webmention"> <script defer src="/public/cards.min.js?v=a76aff63a3"></script> <link rel="stylesheet" type="text/css" href="/public/cards.min.css?v=a76aff63a3"> <script defer src="/public/member-attribution.min.js?v=a76aff63a3"></script><style>:root {--ghost-accent-color: #15171A;}</style> <!-- Google Tag Manager --> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-NWZQ5W6');</script> <!-- End Google Tag Manager --> </head> <body class="home-template is-head-left-logo has-cover"> <div class="viewport"> <header id="gh-head" class="gh-head outer"> <div class="gh-head-inner inner"> <div class="gh-head-brand"> <a class="gh-head-logo" href="https://engineering.procore.com"> <img src="https://engineering.procore.com/content/images/2017/12/ProcoreEngineering_logo_fc_r_blog-1.png" alt="Procore Engineering Blog"> </a> <button class="gh-search gh-icon-btn" aria-label="Search this site" data-ghost-search><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="20" height="20"><path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg></button> <button class="gh-burger" aria-label="Main Menu"></button> </div> <nav class="gh-head-menu"> <ul class="nav"> <li class="nav-home nav-current"><a href="https://engineering.procore.com/">Home</a></li> <li class="nav-about"><a href="https://engineering.procore.com/about/">About</a></li> <li class="nav-engineering"><a href="https://engineering.procore.com/tag/engineering/">Engineering</a></li> <li class="nav-careers"><a href="https://www.procore.com/jobs/engineering.php">Careers</a></li> </ul> </nav> <div class="gh-head-actions"> <button class="gh-search gh-icon-btn" aria-label="Search this site" data-ghost-search><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="20" height="20"><path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg></button> <div class="gh-head-members"> <a class="gh-head-link" href="#/portal/signin" data-portal="signin">Sign in</a> <a class="gh-head-button" href="#/portal/signup" data-portal="signup">Subscribe</a> </div> </div> </div> </header> <div class="site-content"> <div class="site-header-content outer"> <img class="site-header-cover" srcset="/content/images/size/w300/2021/01/blog-header-background.jpg 300w, /content/images/size/w600/2021/01/blog-header-background.jpg 600w, /content/images/size/w1000/2021/01/blog-header-background.jpg 1000w, /content/images/size/w2000/2021/01/blog-header-background.jpg 2000w" sizes="100vw" src="/content/images/size/w2000/2021/01/blog-header-background.jpg" alt="Procore Engineering Blog" /> <div class="site-header-inner inner"> <img class="site-logo" src="https://engineering.procore.com/content/images/2017/12/ProcoreEngineering_logo_fc_r_blog-1.png" alt="Procore Engineering Blog"> </div> </div> <main id="site-main" class="site-main outer"> <div class="inner posts"> <div class="post-feed"> <article class="post-card post post-card-large"> <a class="post-card-image-link" href="/quantifying-the-unquantifiable-how-do-you-know-when-you-need-to-improve-performance/"> <img class="post-card-image" srcset="/content/images/size/w300/2023/10/saffu-E4kKGI4oGaU-unsplash.jpg 300w, /content/images/size/w600/2023/10/saffu-E4kKGI4oGaU-unsplash.jpg 600w, /content/images/size/w1000/2023/10/saffu-E4kKGI4oGaU-unsplash.jpg 1000w, /content/images/size/w2000/2023/10/saffu-E4kKGI4oGaU-unsplash.jpg 2000w" sizes="(max-width: 1000px) 400px, 800px" src="/content/images/size/w600/2023/10/saffu-E4kKGI4oGaU-unsplash.jpg" alt="Quantifying the Unquantifiable - How Do You Know When You Need To Improve Performance" loading="lazy" /> </a> <div class="post-card-content"> <a class="post-card-content-link" href="/quantifying-the-unquantifiable-how-do-you-know-when-you-need-to-improve-performance/"> <header class="post-card-header"> <div class="post-card-tags"> </div> <h2 class="post-card-title"> Quantifying the Unquantifiable - How Do You Know When You Need To Improve Performance </h2> </header> <div class="post-card-excerpt">Improving performance is a never-ending task, and deciding whether it should be prioritized over adding new features can pose a challenge even to the best of us. On one hand, users do not want to use a tool that feels slow; on the other hand, they definitely won’t use</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2023-10-16">16 Oct 2023</time> <span class="post-card-meta-length">5 min read</span> </footer> </div> </article> <article class="post-card post dynamic"> <a class="post-card-image-link" href="/implementing-slos-as-code-a-case-study-2/"> <img class="post-card-image" srcset="/content/images/size/w300/2023/02/SLOs-as-code-image.png 300w, /content/images/size/w600/2023/02/SLOs-as-code-image.png 600w, /content/images/size/w1000/2023/02/SLOs-as-code-image.png 1000w, /content/images/size/w2000/2023/02/SLOs-as-code-image.png 2000w" sizes="(max-width: 1000px) 400px, 800px" src="/content/images/size/w600/2023/02/SLOs-as-code-image.png" alt="Implementing SLOs-as-Code - a Case Study" loading="lazy" /> </a> <div class="post-card-content"> <a class="post-card-content-link" href="/implementing-slos-as-code-a-case-study-2/"> <header class="post-card-header"> <div class="post-card-tags"> </div> <h2 class="post-card-title"> Implementing SLOs-as-Code - a Case Study </h2> </header> <div class="post-card-excerpt">By managing Service Level Objectives as code, we can co-locate SLO definitions and ownership with the product code and team. This supports horizontal scaling of SLO ownership while integrating with the code management process, and creating an audit trail for SLOs.</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2023-02-13">13 Feb 2023</time> <span class="post-card-meta-length">5 min read</span> </footer> </div> </article> <article class="post-card post dynamic"> <a class="post-card-image-link" href="/black-box-slis/"> <img class="post-card-image" srcset="/content/images/size/w300/2022/09/alex-mountain-scene.jpg 300w, /content/images/size/w600/2022/09/alex-mountain-scene.jpg 600w, /content/images/size/w1000/2022/09/alex-mountain-scene.jpg 1000w, /content/images/size/w2000/2022/09/alex-mountain-scene.jpg 2000w" sizes="(max-width: 1000px) 400px, 800px" src="/content/images/size/w600/2022/09/alex-mountain-scene.jpg" alt="Black Box SLIs" loading="lazy" /> </a> <div class="post-card-content"> <a class="post-card-content-link" href="/black-box-slis/"> <header class="post-card-header"> <div class="post-card-tags"> </div> <h2 class="post-card-title"> Black Box SLIs </h2> </header> <div class="post-card-excerpt">Adopting an SLO culture involves identifying the metrics that matter without drowning in noise and alert fatigue. The black box concept lets us aggregate granular metrics into SLIs that focus on the user experience as an indicator of system reliability.</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2022-09-16">16 Sep 2022</time> <span class="post-card-meta-length">4 min read</span> </footer> </div> </article> <article class="post-card post tag-observability tag-engineering featured"> <a class="post-card-image-link" href="/standardizing-observability-at-procore/"> <img class="post-card-image" srcset="https://images.unsplash.com/photo-1507738978512-35798112892c?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDN8fHNlYXR0bGUlMjBsaWJyYXJ5fGVufDB8fHx8MTY1OTk3ODY3NA&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;300 300w, https://images.unsplash.com/photo-1507738978512-35798112892c?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDN8fHNlYXR0bGUlMjBsaWJyYXJ5fGVufDB8fHx8MTY1OTk3ODY3NA&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;600 600w, https://images.unsplash.com/photo-1507738978512-35798112892c?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDN8fHNlYXR0bGUlMjBsaWJyYXJ5fGVufDB8fHx8MTY1OTk3ODY3NA&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;1000 1000w, https://images.unsplash.com/photo-1507738978512-35798112892c?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDN8fHNlYXR0bGUlMjBsaWJyYXJ5fGVufDB8fHx8MTY1OTk3ODY3NA&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;2000 2000w" sizes="(max-width: 1000px) 400px, 800px" src="https://images.unsplash.com/photo-1507738978512-35798112892c?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDN8fHNlYXR0bGUlMjBsaWJyYXJ5fGVufDB8fHx8MTY1OTk3ODY3NA&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;600" alt="Standardizing Observability at Procore" loading="lazy" /> </a> <div class="post-card-content"> <a class="post-card-content-link" href="/standardizing-observability-at-procore/"> <header class="post-card-header"> <div class="post-card-tags"> <span class="post-card-primary-tag">Observability</span> <span class="post-card-featured"><svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M4.49365 4.58752C3.53115 6.03752 2.74365 7.70002 2.74365 9.25002C2.74365 10.6424 3.29678 11.9778 4.28134 12.9623C5.26591 13.9469 6.60127 14.5 7.99365 14.5C9.38604 14.5 10.7214 13.9469 11.706 12.9623C12.6905 11.9778 13.2437 10.6424 13.2437 9.25002C13.2437 6.00002 10.9937 3.50002 9.16865 1.68127L6.99365 6.25002L4.49365 4.58752Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </svg> Featured</span> </div> <h2 class="post-card-title"> Standardizing Observability at Procore </h2> </header> <div class="post-card-excerpt">Implementing observability into all of your services can be a large undertaking. At Procore, we developed observability libraries to lower the barrier of implementing standardized observability across services, while also reducing dependency on specific vendors.</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2022-08-08">08 Aug 2022</time> <span class="post-card-meta-length">3 min read</span> </footer> </div> </article> <article class="post-card post"> <a class="post-card-image-link" href="/drying-out-procores-kubernetes-configuration/"> <img class="post-card-image" srcset="/content/images/size/w300/2021/12/pexels-bartosz-majcher-3605316--3--2.jpg 300w, /content/images/size/w600/2021/12/pexels-bartosz-majcher-3605316--3--2.jpg 600w, /content/images/size/w1000/2021/12/pexels-bartosz-majcher-3605316--3--2.jpg 1000w, /content/images/size/w2000/2021/12/pexels-bartosz-majcher-3605316--3--2.jpg 2000w" sizes="(max-width: 1000px) 400px, 800px" src="/content/images/size/w600/2021/12/pexels-bartosz-majcher-3605316--3--2.jpg" alt="DRYing out Procore’s Kubernetes Configuration" loading="lazy" /> </a> <div class="post-card-content"> <a class="post-card-content-link" href="/drying-out-procores-kubernetes-configuration/"> <header class="post-card-header"> <div class="post-card-tags"> </div> <h2 class="post-card-title"> DRYing out Procore’s Kubernetes Configuration </h2> </header> <div class="post-card-excerpt">In order to meet the increased demand to run more microservices, the Procore Cloud Platform Orchestration team has been tasked with provisioning and maintaining a growing number of Kubernetes clusters.</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2021-12-15">15 Dec 2021</time> <span class="post-card-meta-length">4 min read</span> </footer> </div> </article> <article class="post-card post tag-test"> <a class="post-card-image-link" href="/a-self-service-model-for-load-testing-of-web-services-at-scale/"> <img class="post-card-image" srcset="https://images.unsplash.com/photo-1526676537331-7747bf8278fc?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDV8fHBlcmZvcm1hbmNlfGVufDB8fHx8MTYzNzM1NjU0MA&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;300 300w, https://images.unsplash.com/photo-1526676537331-7747bf8278fc?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDV8fHBlcmZvcm1hbmNlfGVufDB8fHx8MTYzNzM1NjU0MA&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;600 600w, https://images.unsplash.com/photo-1526676537331-7747bf8278fc?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDV8fHBlcmZvcm1hbmNlfGVufDB8fHx8MTYzNzM1NjU0MA&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;1000 1000w, https://images.unsplash.com/photo-1526676537331-7747bf8278fc?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDV8fHBlcmZvcm1hbmNlfGVufDB8fHx8MTYzNzM1NjU0MA&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;2000 2000w" sizes="(max-width: 1000px) 400px, 800px" src="https://images.unsplash.com/photo-1526676537331-7747bf8278fc?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDV8fHBlcmZvcm1hbmNlfGVufDB8fHx8MTYzNzM1NjU0MA&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;600" alt="A Self-Service Model for Load Testing of Web Services at Scale" loading="lazy" /> </a> <div class="post-card-content"> <a class="post-card-content-link" href="/a-self-service-model-for-load-testing-of-web-services-at-scale/"> <header class="post-card-header"> <div class="post-card-tags"> <span class="post-card-primary-tag">Test</span> </div> <h2 class="post-card-title"> A Self-Service Model for Load Testing of Web Services at Scale </h2> </header> <div class="post-card-excerpt">An entire system&#39;s performance comprises the performance of the individual components (services). It is imperative that each service is tested individually. A common Load Test Model that defines tests as data enables development teams to implement and own their load tests on a self-service basis.</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2021-11-30">30 Nov 2021</time> <span class="post-card-meta-length">5 min read</span> </footer> </div> </article> <article class="post-card post tag-bim tag-procore-bim tag-procore"> <a class="post-card-image-link" href="/designing-for-bim-in-the-field/"> <img class="post-card-image" srcset="/content/images/size/w300/2021/11/ipad-pro-mockup-held-in-landscape-position-by-a-construction-worker-a12431.png 300w, /content/images/size/w600/2021/11/ipad-pro-mockup-held-in-landscape-position-by-a-construction-worker-a12431.png 600w, /content/images/size/w1000/2021/11/ipad-pro-mockup-held-in-landscape-position-by-a-construction-worker-a12431.png 1000w, /content/images/size/w2000/2021/11/ipad-pro-mockup-held-in-landscape-position-by-a-construction-worker-a12431.png 2000w" sizes="(max-width: 1000px) 400px, 800px" src="/content/images/size/w600/2021/11/ipad-pro-mockup-held-in-landscape-position-by-a-construction-worker-a12431.png" alt="Designing for BIM in the Field" loading="lazy" /> </a> <div class="post-card-content"> <a class="post-card-content-link" href="/designing-for-bim-in-the-field/"> <header class="post-card-header"> <div class="post-card-tags"> <span class="post-card-primary-tag">BIM</span> </div> <h2 class="post-card-title"> Designing for BIM in the Field </h2> </header> <div class="post-card-excerpt">BIM is essentially the 3D prototype of the project. It can be extremely valuable for understanding how a project is to be built. Until now, the construction industry has been ruled by B2B software, where the user experience was an afterthought.</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2021-11-15">15 Nov 2021</time> <span class="post-card-meta-length">9 min read</span> </footer> </div> </article> <article class="post-card post tag-observability"> <a class="post-card-image-link" href="/the-observability-mindset-why-it-matters/"> <img class="post-card-image" srcset="/content/images/size/w300/2021/11/alex-rhee-iUHbIFCBm70-unsplash.jpg 300w, /content/images/size/w600/2021/11/alex-rhee-iUHbIFCBm70-unsplash.jpg 600w, /content/images/size/w1000/2021/11/alex-rhee-iUHbIFCBm70-unsplash.jpg 1000w, /content/images/size/w2000/2021/11/alex-rhee-iUHbIFCBm70-unsplash.jpg 2000w" sizes="(max-width: 1000px) 400px, 800px" src="/content/images/size/w600/2021/11/alex-rhee-iUHbIFCBm70-unsplash.jpg" alt="The Observability Mindset - Why It Matters" loading="lazy" /> </a> <div class="post-card-content"> <a class="post-card-content-link" href="/the-observability-mindset-why-it-matters/"> <header class="post-card-header"> <div class="post-card-tags"> <span class="post-card-primary-tag">Observability</span> </div> <h2 class="post-card-title"> The Observability Mindset - Why It Matters </h2> </header> <div class="post-card-excerpt">Observability is all about service reliability so that we can provide the utmost customer experience. Ultimately, all roads lead back to the customer and their experience with the product.</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2021-11-12">12 Nov 2021</time> <span class="post-card-meta-length">3 min read</span> </footer> </div> </article> <article class="post-card post tag-observability"> <a class="post-card-image-link" href="/observability-basics/"> <img class="post-card-image" srcset="https://images.unsplash.com/photo-1483919283443-8db97e2bcd81?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDF8fG9ic2VydmV8ZW58MHx8fHwxNjMzOTc3OTA5&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;300 300w, https://images.unsplash.com/photo-1483919283443-8db97e2bcd81?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDF8fG9ic2VydmV8ZW58MHx8fHwxNjMzOTc3OTA5&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;600 600w, https://images.unsplash.com/photo-1483919283443-8db97e2bcd81?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDF8fG9ic2VydmV8ZW58MHx8fHwxNjMzOTc3OTA5&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;1000 1000w, https://images.unsplash.com/photo-1483919283443-8db97e2bcd81?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDF8fG9ic2VydmV8ZW58MHx8fHwxNjMzOTc3OTA5&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;2000 2000w" sizes="(max-width: 1000px) 400px, 800px" src="https://images.unsplash.com/photo-1483919283443-8db97e2bcd81?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDF8fG9ic2VydmV8ZW58MHx8fHwxNjMzOTc3OTA5&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;600" alt="Observability - The Basics" loading="lazy" /> </a> <div class="post-card-content"> <a class="post-card-content-link" href="/observability-basics/"> <header class="post-card-header"> <div class="post-card-tags"> <span class="post-card-primary-tag">Observability</span> </div> <h2 class="post-card-title"> Observability - The Basics </h2> </header> <div class="post-card-excerpt">Microservice environments require significant coordination, insight, and care to be able to monitor and measure requests passing through the system. As Procore continues to scale its microservice architecture, its Engineering teams are expanding their observability capabilities.</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2021-10-11">11 Oct 2021</time> <span class="post-card-meta-length">3 min read</span> </footer> </div> </article> <article class="post-card post tag-frontend tag-test tag-growth tag-javascript"> <a class="post-card-image-link" href="/dynamic-frontend-testing-with-mirage-js/"> <img class="post-card-image" srcset="/content/images/size/w300/2021/09/Screen-Shot-2021-09-02-at-6.35.42-PM.png 300w, /content/images/size/w600/2021/09/Screen-Shot-2021-09-02-at-6.35.42-PM.png 600w, /content/images/size/w1000/2021/09/Screen-Shot-2021-09-02-at-6.35.42-PM.png 1000w, /content/images/size/w2000/2021/09/Screen-Shot-2021-09-02-at-6.35.42-PM.png 2000w" sizes="(max-width: 1000px) 400px, 800px" src="/content/images/size/w600/2021/09/Screen-Shot-2021-09-02-at-6.35.42-PM.png" alt="Dynamic Frontend Testing With Mirage JS" loading="lazy" /> </a> <div class="post-card-content"> <a class="post-card-content-link" href="/dynamic-frontend-testing-with-mirage-js/"> <header class="post-card-header"> <div class="post-card-tags"> <span class="post-card-primary-tag">Frontend</span> </div> <h2 class="post-card-title"> Dynamic Frontend Testing With Mirage JS </h2> </header> <div class="post-card-excerpt">Procore&#39;s testing methods must scale proportionate to our growth. We sought a better tool for ensuring we only release quality code into production. We found and implemented Mirage JS and we want to walk our audience through our process.</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2021-09-03">03 Sep 2021</time> <span class="post-card-meta-length">4 min read</span> </footer> </div> </article> <article class="post-card post tag-observability"> <a class="post-card-image-link" href="/better-monitoring-and-observability-at-procore/"> <img class="post-card-image" srcset="/content/images/size/w300/2021/05/Observability-Pipeline---Architectural-Overview.png 300w, /content/images/size/w600/2021/05/Observability-Pipeline---Architectural-Overview.png 600w, /content/images/size/w1000/2021/05/Observability-Pipeline---Architectural-Overview.png 1000w, /content/images/size/w2000/2021/05/Observability-Pipeline---Architectural-Overview.png 2000w" sizes="(max-width: 1000px) 400px, 800px" src="/content/images/size/w600/2021/05/Observability-Pipeline---Architectural-Overview.png" alt="Better Monitoring and Observability at Procore" loading="lazy" /> </a> <div class="post-card-content"> <a class="post-card-content-link" href="/better-monitoring-and-observability-at-procore/"> <header class="post-card-header"> <div class="post-card-tags"> <span class="post-card-primary-tag">Observability</span> </div> <h2 class="post-card-title"> Better Monitoring and Observability at Procore </h2> </header> <div class="post-card-excerpt">Procore is on a journey to improve our architecture, to better deliver our vision to customers, and to improve our internal developer experience. A key pillar to supporting this journey is improving our Observability.</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2021-05-17">17 May 2021</time> <span class="post-card-meta-length">3 min read</span> </footer> </div> </article> <article class="post-card post tag-deployment tag-debt-management tag-hash-ylan no-image"> <div class="post-card-content"> <a class="post-card-content-link" href="/sequenced-deployments-for-incompatible-front-end-and-back-end-code-releases/"> <header class="post-card-header"> <div class="post-card-tags"> <span class="post-card-primary-tag">deployment</span> </div> <h2 class="post-card-title"> Sequenced Deployments for Incompatible Front-end and Back-end code releases </h2> </header> <div class="post-card-excerpt">Deployment of new code is not instantaneous and can bring unexpected challenges, even in seemingly simple cases.</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2021-05-11">11 May 2021</time> <span class="post-card-meta-length">3 min read</span> </footer> </div> </article> <article class="post-card post tag-process no-image"> <div class="post-card-content"> <a class="post-card-content-link" href="/when-will-it-be-done/"> <header class="post-card-header"> <div class="post-card-tags"> <span class="post-card-primary-tag">Process</span> </div> <h2 class="post-card-title"> When will it be done? </h2> </header> <div class="post-card-excerpt">When will it be done? A simple question, but one that can seem impossible to answer. In 2019, my team and I attended a two-day workshop on Advanced Agile Metrics by agile expert and veteran Dan Vacanti to understand how to answer this question.</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2021-03-17">17 Mar 2021</time> <span class="post-card-meta-length">3 min read</span> </footer> </div> </article> <article class="post-card post tag-architecture no-image"> <div class="post-card-content"> <a class="post-card-content-link" href="/streamlining-architecture-decisions-at-procore/"> <header class="post-card-header"> <div class="post-card-tags"> <span class="post-card-primary-tag">architecture</span> </div> <h2 class="post-card-title"> Streamlining Architecture Decisions at Procore </h2> </header> <div class="post-card-excerpt">At Procore, we strive to have decisions made at the appropriate level, rather than being a strictly top down organization.  We also need to ensure good decisions are made, which means they are based on solid engineering principles, take cross-functional considerations into account, and we remain consistent across teams.  We</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2021-02-23">23 Feb 2021</time> <span class="post-card-meta-length">2 min read</span> </footer> </div> </article> <article class="post-card post tag-data tag-engineering tag-hash-jeff tag-hash-manish no-image"> <div class="post-card-content"> <a class="post-card-content-link" href="/dad-eliminates-top-db-cpu-consumer-with-a-single-env-variable/"> <header class="post-card-header"> <div class="post-card-tags"> <span class="post-card-primary-tag">Data</span> </div> <h2 class="post-card-title"> DAD eliminates top DB CPU consumer with a single environment variable </h2> </header> <div class="post-card-excerpt">The Database Admin (DAD) team is responsible for DB performance, and let’s just say Procore’s growth is keeping us pretty busy. We recently noticed that SET application_name = ? has been climbing the ranks of RDS Performance Insights [https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.Overview.</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2021-02-18">18 Feb 2021</time> <span class="post-card-meta-length">3 min read</span> </footer> </div> </article> <article class="post-card post tag-android tag-mobile tag-open-source tag-hash-rudy featured no-image"> <div class="post-card-content"> <a class="post-card-content-link" href="/fix-your-android-memory-leaks-in-fragments/"> <header class="post-card-header"> <div class="post-card-tags"> <span class="post-card-primary-tag">Android</span> <span class="post-card-featured"><svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M4.49365 4.58752C3.53115 6.03752 2.74365 7.70002 2.74365 9.25002C2.74365 10.6424 3.29678 11.9778 4.28134 12.9623C5.26591 13.9469 6.60127 14.5 7.99365 14.5C9.38604 14.5 10.7214 13.9469 11.706 12.9623C12.6905 11.9778 13.2437 10.6424 13.2437 9.25002C13.2437 6.00002 10.9937 3.50002 9.16865 1.68127L6.99365 6.25002L4.49365 4.58752Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </svg> Featured</span> </div> <h2 class="post-card-title"> Fix your Android Memory Leaks in Fragments </h2> </header> <div class="post-card-excerpt">In the world of mobile, there are many resource constraints, memory being one of the most precious. Early last year, the Procore Android team noticed various crashes in the mobile application caused by insufficient memory. The number of crashes was also spread over various devices, and the issue manifested itself</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2021-01-29">29 Jan 2021</time> <span class="post-card-meta-length">8 min read</span> </footer> </div> </article> <article class="post-card post tag-skills tag-engineering tag-career featured no-image"> <div class="post-card-content"> <a class="post-card-content-link" href="/nomad-your-way-to-fresh-tech-skills/"> <header class="post-card-header"> <div class="post-card-tags"> <span class="post-card-primary-tag">Skills</span> <span class="post-card-featured"><svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M4.49365 4.58752C3.53115 6.03752 2.74365 7.70002 2.74365 9.25002C2.74365 10.6424 3.29678 11.9778 4.28134 12.9623C5.26591 13.9469 6.60127 14.5 7.99365 14.5C9.38604 14.5 10.7214 13.9469 11.706 12.9623C12.6905 11.9778 13.2437 10.6424 13.2437 9.25002C13.2437 6.00002 10.9937 3.50002 9.16865 1.68127L6.99365 6.25002L4.49365 4.58752Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </svg> Featured</span> </div> <h2 class="post-card-title"> Nomad Your Way to Fresh Tech Skills </h2> </header> <div class="post-card-excerpt">One of the lesser-known perks of being an engineer at Procore is that our Engineering department offers employees the opportunity to &quot;nomad&quot; with other teams for a short period of time (typically two to four weeks). When you nomad, you immerse yourself entirely with the new team, attending</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2021-01-12">12 Jan 2021</time> <span class="post-card-meta-length">3 min read</span> </footer> </div> </article> <article class="post-card post tag-productivity tag-management tag-hash-heidi-helfand featured no-image"> <div class="post-card-content"> <a class="post-card-content-link" href="/make-high-impact-decisions-with-confidence-using-alignment-records/"> <header class="post-card-header"> <div class="post-card-tags"> <span class="post-card-primary-tag">Productivity</span> <span class="post-card-featured"><svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M4.49365 4.58752C3.53115 6.03752 2.74365 7.70002 2.74365 9.25002C2.74365 10.6424 3.29678 11.9778 4.28134 12.9623C5.26591 13.9469 6.60127 14.5 7.99365 14.5C9.38604 14.5 10.7214 13.9469 11.706 12.9623C12.6905 11.9778 13.2437 10.6424 13.2437 9.25002C13.2437 6.00002 10.9937 3.50002 9.16865 1.68127L6.99365 6.25002L4.49365 4.58752Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </svg> Featured</span> </div> <h2 class="post-card-title"> Make High Impact Decisions with Confidence using Alignment Records </h2> </header> <div class="post-card-excerpt">Imagine you need to set the future technical direction of a large Engineering organization. How do you capture the input from all of your Architect Engineers and Engineering Directors and quickly transform it into a visual format that would increase confidence in technical decisions? At Procore, we evolved the Fist</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2020-12-14">14 Dec 2020</time> <span class="post-card-meta-length">5 min read</span> </footer> </div> </article> <article class="post-card post tag-engineering tag-productivity no-image"> <div class="post-card-content"> <a class="post-card-content-link" href="/fix-what-bugs-you/"> <header class="post-card-header"> <div class="post-card-tags"> <span class="post-card-primary-tag">Engineering</span> </div> <h2 class="post-card-title"> Fix What Bugs You </h2> </header> <div class="post-card-excerpt">Have you ever found yourself willfully ignoring something you know you could do better, just because it seemed too unimportant to be worth improving? I have, and it really bugged me. I finally bit the bullet and improved it, and quickly realized how important a small change can be. Software</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2020-12-08">08 Dec 2020</time> <span class="post-card-meta-length">2 min read</span> </footer> </div> </article> <article class="post-card post tag-hash-jeff no-image"> <div class="post-card-content"> <a class="post-card-content-link" href="/how-to-make-a-query-280-000-times-faster/"> <header class="post-card-header"> <div class="post-card-tags"> </div> <h2 class="post-card-title"> How to Make a Query 280,000 Times Faster </h2> </header> <div class="post-card-excerpt">We usually make small iterative improvements in performance. However, on rare occasions, an opportunity arises to make an improvement of five orders of magnitude by changing a single line! After learning about a slow query that was hitting our statement timeout from one of our Site Reliability Engineers, I reformatted</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2020-12-01">01 Dec 2020</time> <span class="post-card-meta-length">1 min read</span> </footer> </div> </article> <article class="post-card post tag-growth tag-procore tag-ruby-on-rails tag-career tag-job-responsibility tag-engineering tag-dev featured no-image"> <div class="post-card-content"> <a class="post-card-content-link" href="/shape-your-own-role-at-procore/"> <header class="post-card-header"> <div class="post-card-tags"> <span class="post-card-primary-tag">Growth</span> <span class="post-card-featured"><svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M4.49365 4.58752C3.53115 6.03752 2.74365 7.70002 2.74365 9.25002C2.74365 10.6424 3.29678 11.9778 4.28134 12.9623C5.26591 13.9469 6.60127 14.5 7.99365 14.5C9.38604 14.5 10.7214 13.9469 11.706 12.9623C12.6905 11.9778 13.2437 10.6424 13.2437 9.25002C13.2437 6.00002 10.9937 3.50002 9.16865 1.68127L6.99365 6.25002L4.49365 4.58752Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </svg> Featured</span> </div> <h2 class="post-card-title"> Shape Your Own Role at Procore </h2> </header> <div class="post-card-excerpt">Here at Procore, we don&#39;t just embrace change; we drive change! Procore Engineers can shape their own roles and choose to what degree their work affects the company. You drive your own Procore experience. Today, I’m going to share some stories of Procore Engineers who have successfully</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2020-11-19">19 Nov 2020</time> <span class="post-card-meta-length">2 min read</span> </footer> </div> </article> <article class="post-card post tag-procore tag-procore-r-d tag-engineering tag-hash-brendan"> <a class="post-card-image-link" href="/being-an-engineering-intern-at-procore/"> <img class="post-card-image" srcset="/content/images/size/w300/2019/10/29661771565_35898a35f8_k.jpg 300w, /content/images/size/w600/2019/10/29661771565_35898a35f8_k.jpg 600w, /content/images/size/w1000/2019/10/29661771565_35898a35f8_k.jpg 1000w, /content/images/size/w2000/2019/10/29661771565_35898a35f8_k.jpg 2000w" sizes="(max-width: 1000px) 400px, 800px" src="/content/images/size/w600/2019/10/29661771565_35898a35f8_k.jpg" alt="Being an Engineering Intern at Procore" loading="lazy" /> </a> <div class="post-card-content"> <a class="post-card-content-link" href="/being-an-engineering-intern-at-procore/"> <header class="post-card-header"> <div class="post-card-tags"> <span class="post-card-primary-tag">Procore</span> </div> <h2 class="post-card-title"> Being an Engineering Intern at Procore </h2> </header> <div class="post-card-excerpt">About two years ago, when I was first searching for a software engineering internship, I remember asking myself, “What do I want to get out of this new experience? What would an ideal internship be?” It really boiled down to three main asks: 1. I wanted to be treated and</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2019-10-29">29 Oct 2019</time> <span class="post-card-meta-length">4 min read</span> </footer> </div> </article> <article class="post-card post tag-procore tag-procore-r-d tag-engineering tag-platform tag-squad"> <a class="post-card-image-link" href="/breaking-out-of-silos/"> <img class="post-card-image" srcset="/content/images/size/w300/2019/06/32462881896_107ed9ac9c_k.jpg 300w, /content/images/size/w600/2019/06/32462881896_107ed9ac9c_k.jpg 600w, /content/images/size/w1000/2019/06/32462881896_107ed9ac9c_k.jpg 1000w, /content/images/size/w2000/2019/06/32462881896_107ed9ac9c_k.jpg 2000w" sizes="(max-width: 1000px) 400px, 800px" src="/content/images/size/w600/2019/06/32462881896_107ed9ac9c_k.jpg" alt="Breaking out of silos" loading="lazy" /> </a> <div class="post-card-content"> <a class="post-card-content-link" href="/breaking-out-of-silos/"> <header class="post-card-header"> <div class="post-card-tags"> <span class="post-card-primary-tag">Procore</span> </div> <h2 class="post-card-title"> Breaking out of silos </h2> </header> <div class="post-card-excerpt">Authors: Stephanie Pirman and Kellie Spears What we’ve learned by building products on multiple platforms in the same squad A squad is comprised of multiple roles at Procore including software engineers, quality assurance engineers, UX engineers and product managers. We (Stephanie and Kellie) work on the Field Productivity Squad</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2019-06-19">19 Jun 2019</time> <span class="post-card-meta-length">3 min read</span> </footer> </div> </article> <article class="post-card post tag-procore tag-procore-r-d tag-quota-minder tag-engineering"> <a class="post-card-image-link" href="/when-milliseconds-matter/"> <img class="post-card-image" srcset="/content/images/size/w300/2019/06/engineering_milli-.jpg 300w, /content/images/size/w600/2019/06/engineering_milli-.jpg 600w, /content/images/size/w1000/2019/06/engineering_milli-.jpg 1000w, /content/images/size/w2000/2019/06/engineering_milli-.jpg 2000w" sizes="(max-width: 1000px) 400px, 800px" src="/content/images/size/w600/2019/06/engineering_milli-.jpg" alt="When Milliseconds Matter" loading="lazy" /> </a> <div class="post-card-content"> <a class="post-card-content-link" href="/when-milliseconds-matter/"> <header class="post-card-header"> <div class="post-card-tags"> <span class="post-card-primary-tag">Procore</span> </div> <h2 class="post-card-title"> When Milliseconds Matter </h2> </header> <div class="post-card-excerpt">Authors: Shayon Javadizadeh, Ishjot Walia Background Quota Minder is a microservice written in Elixir that enforces API Rate Limits on our third party integrators and internal applications. It is built with knowledge of the Procore domain which enables us to construct rate limits that make sense for Procore specifically, as</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2019-06-11">11 Jun 2019</time> <span class="post-card-meta-length">6 min read</span> </footer> </div> </article> <article class="post-card post tag-railsconf tag-rails-conf-2019 tag-ruby-on-rails tag-speakers"> <a class="post-card-image-link" href="/procore-railsconf-2019-speakers-and-their-key-takeaways/"> <img class="post-card-image" srcset="/content/images/size/w300/2019/05/RailsConf2019.jpg 300w, /content/images/size/w600/2019/05/RailsConf2019.jpg 600w, /content/images/size/w1000/2019/05/RailsConf2019.jpg 1000w, /content/images/size/w2000/2019/05/RailsConf2019.jpg 2000w" sizes="(max-width: 1000px) 400px, 800px" src="/content/images/size/w600/2019/05/RailsConf2019.jpg" alt="Procore speakers share highlights from RailsConf 2019" loading="lazy" /> </a> <div class="post-card-content"> <a class="post-card-content-link" href="/procore-railsconf-2019-speakers-and-their-key-takeaways/"> <header class="post-card-header"> <div class="post-card-tags"> <span class="post-card-primary-tag">RailsConf</span> </div> <h2 class="post-card-title"> Procore speakers share highlights from RailsConf 2019 </h2> </header> <div class="post-card-excerpt">A few weeks ago, Procore sponsored and attended RailsConf 2019 [https://railsconf.com/], one of the world’s largest gatherings of Rails developers and Ruby enthusiasts. Procore’s application is built on Ruby on Rails, which is why being a part of RailsConf is valuable from both a business and</div> </a> <footer class="post-card-meta"> <time class="post-card-meta-date" datetime="2019-05-15">15 May 2019</time> <span class="post-card-meta-length">3 min read</span> </footer> </div> </article> </div> <nav class="pagination"> <span class="page-number">Page 1 of 2</span> <a class="older-posts" href="/page/2/">Older Posts <span aria-hidden="true">&rarr;</span></a> </nav> </div> </main> </div> <footer class="site-footer outer"> <div class="inner"> <section class="copyright"><a href="https://engineering.procore.com">Procore Engineering Blog</a> &copy; 2025</section> <nav class="site-footer-nav"> </nav> <div class="gh-powered-by"><a href="https://ghost.org/" target="_blank" rel="noopener">Powered by Ghost</a></div> </div> </footer> </div> <script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"> </script> <script src="https://engineering.procore.com/assets/built/casper.js?v=a76aff63a3"></script> <script> $(document).ready(function () { // Mobile Menu Trigger $('.gh-burger').click(function () { $('body').toggleClass('gh-head-open'); }); // FitVids - Makes video embeds responsive $(".gh-content").fitVids(); }); </script> <script> $(".nav-careers a").attr("target", "_blank"); </script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10