Being an Engineering Intern at Procore

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: I wanted to be treated and challenged like an engineer, not “just an intern”. I wanted to learn and grow, both as an engineer, and as a young professional. I wanted to know the work I was doing had an impact on an actual end user. I’m now entering my third internship with Procore, making it... Read More

Breaking out of silos

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 at Procore and sat down together to write this post with the intention of sharing what we’ve learned by developing a key feature set on multiple platforms within the same squad. Our squad also includes experts who code on multiple platforms including Web, iOS and Android. We didn’t... Read More

When Milliseconds Matter

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 opposed to an off-the-shelf rate limiting solution. Quota Minder also has the concept of “tiered buckets” which allow for several different types of rate limits to be counted against a client at any given time. We are then able to enforce both “spikes” and “count” rate limits, which protect against... Read More

Introducing Blueprinter

A new way to format and serialize APIs. Blueprinter is a declarative and fast Ruby object to JSON serializer, an alternative to solutions like Active Model Serializers. Why build another serializer? When we began writing Blueprinter, existing options at the time of writing were few, most suffered from poor performance and hard to read code. Procore has a very large API, with hundreds of endpoints representing hundreds more data structures. We needed a fast, simple option that we could use across our gamut of different needs. We noticed an opportunity to solve our needs as well as something we could... Read More

Twisted Tales

Making Redux Saga scalable with TDD, SOLID principles and the Narrator Design Pattern There and Back Again... Asynchronous code is hard. Talking to a server is one of the most critical parts of a modern web application, and being able to write tests around this communication layer is imperative. The JavaScript ecosystem has some excellent state management solutions, with Redux being probably the most popular flavor. This simple and intuitive library provides the best solution we've seen to a longstanding problem, and is built with testability in mind. However, we've found that the asynchronous libraries commonly used with Redux can... Read More