Shopify Engineering Stories and resources from the teams who build and scale Shopify, the leading cloud-based, multi-channel commerce platform. https://shopify.engineering/blog.atom 2026-09-10T12:27:06.000Z Shopify Engineering Migrating Shop app from React Native to native https://shopify.engineering/shop-app-migration 2026-09-10T12:27:06.000Z 2026-09-10T12:27:06.000Z We migrated the Shop app from React Native to Swift and Kotlin. Assisted by AI, the team was able to go from a proof of concept to a fully rebuilt native app published in the app stores in just 12 weeks. Native is now the future of mobile at Shopify https://shopify.engineering/back-to-native 2026-09-10T12:25:28.000Z 2026-09-10T12:25:28.000Z Coding agents changed what it costs to build mobile apps twice. Here’s why Shopify is moving from React Native back to Swift and Kotlin. How River takes security work from a fix to merge https://shopify.engineering/river-vulnerability-remediation 2026-09-02T16:30:45.000Z 2026-09-02T16:30:45.000Z River, Shopify’s AI agent in Slack, enables autonomous vulnerability remediation, not just detection. Gisting: Compressing LLM Agent context to ↑ throughput and ↓ cost https://shopify.engineering/gisting 2026-08-19T14:32:58.000Z 2026-08-19T14:32:58.000Z Gisting compresses context into a set of learned tokens, preserving its quality while making the model faster and cheaper. How we raised mobile end-to-end test stability to 98% https://shopify.engineering/mobile-e2e-testing 2026-08-12T20:02:35.000Z 2026-08-12T20:02:35.000Z We rebuilt our mobile end-to-end testing framework with a strict API and computer vision, raising test stability drastically. Sidekick's continual learning loop https://shopify.engineering/sidekicks-continual-learning-loop 2026-08-05T14:52:54.000Z 2026-08-05T14:52:54.000Z How we compress production failures into model weights every day, beat frontier-model quality, and cut serving costs 96%. Building an agentic harness that outlasts the model https://shopify.engineering/building-an-agentic-harness-that-outlasts-the-model 2026-07-29T15:30:00.000Z 2026-07-29T15:30:00.000Z We built an agentic code review and test oracle harness that discovers vulnerabilities, proves them with real tests, and provides Shopify-tuned fixes. Upgrading Checkout Blocks app to Polaris web components https://shopify.engineering/upgrading-checkout-blocks-app-to-polaris-web-components 2026-07-16T17:19:40.000Z 2026-07-16T17:19:40.000Z We moved five high-traffic checkout extensions to remote-dom and Polaris web components, cutting bundle sizes drastically and making checkout faster. Inside Shopify Hack Days: Building a prototype for music-playing pages https://shopify.engineering/hack-days 2026-07-14T13:55:57.000Z 2026-07-14T13:55:57.000Z How a Hack Days team built a music player, custom GLSL visualizers, and an artist toolkit for storefronts, all in three days. Clustering billions of products for agentic commerce with Catalog API https://shopify.engineering/catalog-clustering 2026-06-17T16:54:51.000Z 2026-06-17T16:54:51.000Z Building an LLM-powered pipeline to match product listings across millions of merchants into a unified catalog that AI agents can search. Teaching Sidekick to say no: automated data curation with LLM judge consensus https://shopify.engineering/sidekick-curation 2026-06-15T19:30:00.000Z 2026-06-15T19:30:00.000Z Production training data only captures successful queries; it can't teach a model when to say no. We built an automated curation pipeline using LLM judge consensus to close that gap. Quick: An internal hosting platform for the AI era https://shopify.engineering/quick 2026-06-10T12:49:23.000Z 2026-06-10T12:49:23.000Z Quick lets anyone at Shopify ship a site in seconds. It has changed the culture of how we build and share. Under the River https://shopify.engineering/under-the-river 2026-05-28T12:30:02.000Z 2026-05-28T12:30:02.000Z What it took to ship our Slack-native agent River, lessons learned, and the substrate that runs beneath it. Co-authored by River. We replaced Redis with MySQL for inventory reservations—and it scaled https://shopify.engineering/scaling-inventory-reservations 2026-05-12T16:51:53.000Z 2026-05-12T16:51:53.000Z How we used SKIP LOCKED, composite primary keys, and connection visibility to hit our scale targets. Flow generation through natural language: An agentic modeling approach https://shopify.engineering/fine-tuning-agent-shopify-flow 2026-04-22T12:32:02.000Z 2026-04-22T12:32:02.000Z We fine-tuned Qwen3-32B into a tool-calling agent that generates Flow automations from natural language—faster, cheaper, and more accurate than the frontier model it replaced, with a weekly retraining flywheel built on real merchant data. Autoresearch isn’t just for training models https://shopify.engineering/autoresearch 2026-04-15T16:19:20.000Z 2026-04-15T16:19:20.000Z Tobi and I generalized Karpathy’s Autoresearch to improve 40+ metrics across Shopify, then we open-sourced our project. Building a Magic Mirror: AI retail experiences with Remix https://shopify.engineering/magic-mirror 2026-03-19T12:33:46.000Z 2026-03-19T12:33:46.000Z The technical blueprint for an AI-powered mirror that sees customers, analyzes their appearance, and delivers personalized product recommendations in real-time. Shopify’s journey to faster breadth-first GraphQL execution https://shopify.engineering/faster-breadth-first-graphql-execution 2026-03-12T12:19:08.000Z 2026-03-12T12:19:08.000Z Conventional GraphQL execution uses depth-first traversal that incurs many hidden costs. We questioned why, rewrote it in a faster breadth-first manner, and saw dramatic results. 2,000 robots walk into a shop... https://shopify.engineering/simgym 2026-02-27T18:11:45.000Z 2026-02-27T18:11:45.000Z SimGym infrastructure for synthetic customers at scale. A Shopify + NVIDIA collaboration. The generative recommender behind Shopify's commerce engine https://shopify.engineering/generative-recommendations 2026-02-25T16:04:54.000Z 2026-02-25T16:04:54.000Z Treating buyer journeys as sequences instead of simplified signals, and building a model fast enough to serve at scale. SkyPilot at Shopify: Multi-cloud GPUs without the pain https://shopify.engineering/skypilot 2026-01-26T14:49:55.000Z 2026-01-26T14:49:55.000Z GPUs are annoying. Shopify uses SkyPilot to make them less so: one YAML file, multiple clouds, clean development ergonomics. Building the Universal Commerce Protocol https://shopify.engineering/ucp 2026-01-11T14:17:01.000Z 2026-01-11T14:17:01.000Z We built UCP to power agentic commerce. Here's the architecture behind it. Tangle: An open-source ML experimentation platform built at Shopify scale https://shopify.engineering/tangle 2025-12-05T15:47:00.000Z 2025-12-05T15:47:00.000Z Tangle saves months of compute time, makes every experiment automatically reproducible, and allows teammates to share computation without coordination. Behind the build: 2025's BFCM globe in a pinball machine 🌎🕹️ https://shopify.engineering/2025-bfcm-live-globe 2025-12-03T14:28:24.000Z 2025-12-03T14:28:24.000Z Real-time merchant sales rendered on our globe, Easter eggs galore, and a pinball machine because... why not? Run for your money: Engineering a treadmill that prints store credit https://shopify.engineering/how-we-built-a-gamified-treadmill 2025-11-25T13:31:13.000Z 2025-11-25T13:31:13.000Z We combined FTMS sensors, Socket.IO, and POS UI extensions to turn a manual treadmill into a discount-printing machine. How we prepare Shopify for BFCM https://shopify.engineering/bfcm-readiness-2025 2025-11-20T14:40:48.000Z 2025-11-20T14:40:48.000Z From March to October we simulated traffic tsunamis, injected chaos, and fixed every bottleneck before our merchants needed us most. Building world-class product search at Shopify: Where C++ excellence meets ML innovation https://shopify.engineering/world-class-product-search 2025-11-12T16:21:44.000Z 2025-11-12T16:21:44.000Z Learn how we solved a major search engineering dilemma—running machine learning models at native C++ speed. Beyond classification: How AI agents are evolving Shopify's product taxonomy at scale https://shopify.engineering/product-taxonomy-at-scale 2025-10-09T05:18:20.000Z 2025-10-09T05:18:20.000Z Last year, over 875 million people bought items from Shopify merchants. Building on our prior Vision Language Model-based product classification, this post explores how AI agents are evolving the taxonomy itself. Migrating to React Native's New Architecture https://shopify.engineering/react-native-new-architecture 2025-09-05T20:26:56.000Z 2025-09-05T20:26:56.000Z Building production-ready agentic systems: Lessons from Shopify Sidekick https://shopify.engineering/building-production-ready-agentic-systems 2025-08-26T10:00:00.000Z 2025-08-26T10:00:00.000Z Learn how we evolved our AI assistant architecture and built robust evaluation frameworks for real-world deployment. MCP UI: Breaking the text wall with interactive components https://shopify.engineering/mcp-ui-breaking-the-text-wall 2025-08-05T17:21:27.000Z 2025-08-05T17:21:27.000Z MCP UI extends the Model Context Protocol to enable AI agents to return fully interactive UI components. It solves the critical challenge that commerce experiences require visual and interactive elements like product selectors, image galleries, and cart flows. This open-source protocol allows agents to embed commerce components while maintaining control through an intent-based messaging system, delivering shopping experiences that go far beyond traditional text-only AI interactions. FlashList v2: A ground-up rewrite for React Native's New Architecture https://shopify.engineering/flashlist-v2 2025-07-31T18:32:29.000Z 2025-07-31T18:32:29.000Z FlashList v2 is a complete rewrite, delivering faster load times, improved scrolling performance, and precise rendering without requiring item size estimates. It powers thousands of lists in the Shopify mobile app and is now production-ready. Leveraging multimodal LLMs for Shopify’s global catalogue: Recap of expo talk at ICLR 2025 https://shopify.engineering/leveraging-multimodal-llms 2025-07-16T14:43:31.000Z 2025-07-16T14:43:31.000Z Our Global Catalogue demonstrates the impact of multimodal LLMs on one of commerce’s hardest problems: building a unified, structured, and continuously evolving understanding of billions of product listings created by millions of merchants. Augmented commerce: Machine learning at Shopify https://shopify.engineering/machine-learning-at-shopify 2025-07-04T13:36:30.000Z 2025-07-04T13:36:30.000Z Commerce is a dynamic ecosystem where our mission is to empower every merchant to succeed. We optimize each step of their journey—from product creation to customer delivery—using advanced tools, infrastructure, and partnerships to solve a complex optimization challenge. Remixing Shopify's Admin: How We Made It 30% Faster and AI-Ready https://shopify.engineering/remixing-admin 2025-06-30T18:09:52.000Z 2025-06-30T18:09:52.000Z Learn how we just made Shopify's Admin 30% faster while setting it up for AI superpowers. We overhauled admin.shopify.com, transforming the system that supports 67 million daily page views and empowers merchants in managing their businesses. The Future of React Native Graphics: WebGPU, Skia, and Beyond https://shopify.engineering/webgpu-skia-web-graphics 2025-06-20T15:37:49.000Z 2025-06-20T15:37:49.000Z WebGPU is revolutionizing React Native graphics by enabling a unified backend architecture, leveraging web ecosystem giants like Three.js for 3D experiences, and facilitating general-purpose GPU computing for tasks like machine learning. This has directly led to significant performance enhancements and expanded platform support for React Native Skia, with the upcoming Skia Graphite promising features like automatic threading and seamless 2D/3D composition. Introducing Roast: Structured AI workflows made easy https://shopify.engineering/introducing-roast 2025-06-18T07:00:00.000Z 2025-06-18T07:00:00.000Z Our Augmented Engineering DX team tackles developer productivity challenges like flaky tests and low test coverage using AI agents. We discovered breaking complex tasks into discrete steps was key to reliable AI performance, leading to the creation and open-sourcing of Roast, a tool designed to structure AI workflows effectively. Introducing the commerce payments protocol https://shopify.engineering/commerce-payments-protocol 2025-06-12T18:38:14.000Z 2025-06-12T18:38:14.000Z Learn how we partnered with Coinbase to bring payments onchain at scale with a new smart contract protocol to meet the complex requirements of commerce. Resilient Import Maps - Better Theme Development and Beyond https://shopify.engineering/resilient-import-maps 2025-05-28T14:00:00.000Z 2025-05-28T14:00:00.000Z Import maps are great for both performance and developer experience, but their original limitations made them hard to use, especially at Shopify’s scale. We stepped up and pushed changes across the HTML spec, Chromium and WebKit to fix these issues at the web platform level. Now, developers can interleave JavaScript modules and multiple import maps on their HTML pages without worrying about correctness issues. Evolution of Product Classification at Shopify: From Categories to Comprehensive Product Understanding https://shopify.engineering/evolution-product-classification 2025-05-08T04:00:00.000Z 2025-05-08T04:00:00.000Z Shopify’s product classification system has evolved from basic categorization to an AI-driven framework using Vision Language Models and the Shopify Product Taxonomy. It accurately classifies products, extracts attributes, and processes over 30 million predictions daily, improving search, discovery, trust, and efficiency for merchants and buyers. Mobile Bridge: Making WebViews Feel Native https://shopify.engineering/mobilebridge-native-webviews 2025-04-25T14:12:00.000Z 2025-04-25T14:12:00.000Z Learn how we tackled the main issues of traditional WebViews—performance, appearance, and integration—and how Mobile Bridge became a game-changer in our mobile development strategy, even allowing us to accelerate the migration to React Native. Five years of React Native at Shopify https://shopify.engineering/five-years-of-react-native-at-shopify 2025-01-13T23:20:54.000Z 2025-01-13T23:20:54.000Z How We Built the BFCM 2023 Globe https://shopify.engineering/how-we-built-shopifys-bfcm-2023-globe 2024-10-30T19:03:30.000Z 2024-10-30T19:03:30.000Z How Shopify improved consumer search intent with real-time ML https://shopify.engineering/how-shopify-improved-consumer-search-intent-with-real-time-ml 2024-10-18T15:33:55.000Z 2024-10-18T15:33:55.000Z Tophat: Crafting a Delightful Mobile Developer Experience https://shopify.engineering/shopify-tophat-mobile-developer-testing 2024-08-23T17:16:27.000Z 2024-08-23T17:16:27.000Z Insight into how Shopify created a seamless one-click manual testing experience (known as "tophatting") for mobile applications by creating a macOS app. Mitigating Deadlocks in high concurrency environments https://shopify.engineering/mitigating-deadlocks-in-high-concurrency-environments 2024-08-14T16:31:20.000Z 2024-08-14T16:31:20.000Z Shipping support for module script integrity in Chrome & Safari https://shopify.engineering/shipping-support-for-module-script-integrity-in-chrome-safari 2024-08-02T17:17:47.000Z 2024-08-02T17:17:47.000Z How we shipped ES module integrity in browsers and made commerce and the web better for everyone! Improving Shopify App’s Performance https://shopify.engineering/improving-shopify-app-s-performance 2024-03-05T20:37:37.000Z 2024-03-05T20:37:37.000Z A Packwerk Retrospective https://shopify.engineering/a-packwerk-retrospective 2024-02-07T21:40:35.000Z 2024-02-07T21:40:35.000Z Horizontally scaling the Rails backend of Shop app with Vitess https://shopify.engineering/horizontally-scaling-the-rails-backend-of-shop-app-with-vitess 2024-01-17T20:34:53.000Z 2024-01-17T20:34:53.000Z Shop app horizontally scaled a Ruby on Rails app with Vitess. This blog describes Vitess and our detailed approach for introducing Vitess to a Rails app. Getting Started with React Native Skia https://shopify.engineering/getting-started-with-react-native-skia 2023-12-04T15:00:03.000Z 2023-12-04T15:00:03.000Z Introducing Ruvy https://shopify.engineering/introducing-ruvy 2023-10-18T13:43:29.000Z 2023-10-18T13:43:29.000Z Building a ShopifyQL Code Editor https://shopify.engineering/building-a-shopifyql-code-editor 2023-09-11T14:02:54.000Z 2023-09-11T14:02:54.000Z Sidekick’s Improved Streaming Experience https://shopify.engineering/sidekicks-improved-streaming 2023-08-01T20:08:07.000Z 2023-08-01T20:08:07.000Z Shopify’s platform is the Web platform https://shopify.engineering/shopifys-platform-is-the-web-platform 2023-07-26T15:51:33.000Z 2023-07-26T15:51:33.000Z Contributing support for a Wasm instruction to Winch https://shopify.engineering/contributing-support-for-a-wasm-instruction-to-winch 2023-07-18T20:17:28.000Z 2023-07-18T20:17:28.000Z Jeff Charles, a Senior Shopify Developer, shares key learnings from his successful pull request to Winch. The pull request aimed to add support for various WebAssembly instructions to Wasmtime's baseline (non-optimizing) compiler. Creating a Flexible Order Routing System with Shopify Functions https://shopify.engineering/creating-a-flexible-order-routing-system-with-shopify-functions 2023-04-13T13:30:00.000Z 2023-04-13T13:30:00.000Z In this article, I’ll cover how we added flexibility to our previous one-size-fits-all order routing system with the introduction of “routing rules”, and how we dogfooded our own Shopify Functions feature to give merchants the ability to create their own routing rules. Adventures in Garbage Collection: Improving GC Performance in our Massive Monolith https://shopify.engineering/adventures-in-garbage-collection 2023-04-06T14:30:00.000Z 2023-04-06T14:30:00.000Z At the beginning of this year, we ran several experiments aimed at reducing the latency impact of the Ruby garbage collector (GC) in Shopify's monolith. In this article, Jean talks about the changes we made to improve GC performance, and more importantly, how we got to these changes. How Migrating from Vanilla Redux to Redux Toolkit Improved State Management in Shopify POS https://shopify.engineering/react-redux-toolkit-migration 2023-03-31T13:30:02.000Z 2023-03-31T13:30:02.000Z A look at Shopify’s experience improving state management in the Shopify POS app by migrating from a Vanilla Redux codebase to Redux Toolkit one. What Being a Staff Developer Means at Shopify https://shopify.engineering/what-being-a-staff-developer-means-at-shopify 2023-03-29T14:00:01.000Z 2023-03-29T14:00:01.000Z A staff developer is an adaptable engineering leader that's comfortable working with ambiguity. Supporting Passkeys in Shop's Authentication Flows https://shopify.engineering/supporting-passkeys-in-shop-authentication-flows 2023-03-24T13:00:01.000Z 2023-03-24T13:00:01.000Z Passkeys are a new login credential based on public-key cryptography that replace the need for username and password sign-ins. Lessons From Linguistics: i18n Best Practices for Front-End Developers https://shopify.engineering/internationalization-i18n-best-practices-front-end-developers 2023-03-16T18:19:33.000Z 2023-03-16T18:19:33.000Z Here are a few internationalization (i18n) best practices to help front-end developers avoid errors and serve more robust text content on multilingual websites and apps. Unlocking Real-time Predictions with Shopify's Machine Learning Platform https://shopify.engineering/shopifys-machine-learning-platform-real-time-predictions 2023-03-10T16:16:27.000Z 2023-03-10T16:16:27.000Z Learn how Shopify Data built new online inference capabilities into its Machine Learning Platform to deploy and serve models for real-time prediction at scale. Improving the Developer Experience with the Ruby LSP https://shopify.engineering/improving-the-developer-experience-with-ruby-lsp 2023-02-24T14:00:01.000Z 2023-02-24T14:00:01.000Z The Ruby LSP is a new language server built at Shopify that makes coding in Ruby even better by providing extra Ruby features for any editor that has a client layer for the LSP. In this article, we’ll cover how we built the Ruby LSP, the features included within it, and how you can install it. The Case Against Monkey Patching, From a Rails Core Team Member https://shopify.engineering/the-case-against-monkey-patching 2023-02-21T14:00:04.000Z 2023-02-21T14:00:04.000Z Monkey patching is considered one of the more powerful features of the Ruby programming language. However, by the end of this post I’m hoping to convince you that they should be used sparingly, if at all, because they are brittle, dangerous, and often unnecessary. I’ll also share tips on how to use them as safely as possible in the rare cases where you do need to monkey patch. The 25 Percent Rule for Tackling Technical Debt https://shopify.engineering/technical-debt-25-percent-rule 2023-02-16T17:00:01.000Z 2023-02-16T17:00:01.000Z Let’s talk about technical debt. Let’s talk about practical usable approaches for actually paying it down on a daily, weekly, monthly, and yearly basis. Let’s talk about what debt needs to be fixed now versus what can wait for better planning. ShopifyQL Notebooks: Simplifying Querying with Commerce Data Models https://shopify.engineering/building-commerce-data-models-with-shopifyql 2023-02-14T16:00:04.000Z 2023-02-14T16:00:04.000Z We recently released ShopifyQL Notebooks, a powerful self-serve tool which enables merchants to explore their business metrics without any SQL expertise. Here’s how we used ShopifyQL and commerce data models to make it possible. Bringing Javascript to WebAssembly for Shopify Functions https://shopify.engineering/javascript-in-webassembly-for-shopify-functions 2023-02-09T14:00:02.000Z 2023-02-09T14:00:02.000Z While we’re working on getting our Shopify Functions infrastructure ready for the public beta, we thought we’d use this opportunity to shine some light on how we brought JavaScript to WebAssembly, how we made everything fit within our very tight Shopify Function constraints, and what our plans for the future look like. The Complex Data Models Behind Shopify's Tax Insights Feature https://shopify.engineering/complex-data-models-behind-shopify-tax-insights 2023-02-08T15:00:04.000Z 2023-02-08T15:00:04.000Z The intensive data work behind Shopify's Tax Insights feature required building functionality to handle dynamically changing information The Hardest Part of Writing Tests is Getting Started https://shopify.engineering/the-hardest-part-of-writing-tests-is-getting-started 2023-02-02T15:30:00.000Z 2023-02-02T15:30:00.000Z The hardest part of writing tests is setting things up. Full test suites have a lot of complicated helper tools, stubs, and fixtures. They’re not easy to understand as a beginner, let alone set up for yourself. This post covers the four things you can do to get started. Performance Testing At Scale—for BFCM and Beyond https://shopify.engineering/scale-performance-testing 2023-01-27T16:32:54.000Z 2023-01-27T16:32:54.000Z Let’s unpack our approach to BFCM Scale Testing to explore some of what it takes to ensure that our ecommerce platform can handle the busiest weekend of the year. From Farmer to Security Engineer: How Dev Degree Helped Me Find My Dream Job https://shopify.engineering/from-farmer-to-security-engineer 2023-01-26T16:00:02.000Z 2023-01-26T16:00:02.000Z This story looks at the opportunity Dev Degree gave me, the challenges I overcame, and the weaknesses that turned out to be strengths. If you’re thinking about a career in tech, but don’t think you have the stuff for it, this story is for you. Making Your React Native Gestures Feel Natural https://shopify.engineering/making-react-native-gestures-feel-natural 2023-01-20T18:37:05.000Z 2023-01-20T18:37:05.000Z Ruby 3.2’s YJIT is Production-Ready https://shopify.engineering/ruby-yjit-is-production-ready 2023-01-17T13:30:02.000Z 2023-01-17T13:30:02.000Z YJIT, a just-in-time (JIT) implementation on top of CRuby built at Shopify, is now production-ready and delivering major improvements to performance and speed. Maxime (Senior Staff Engineer and leader of the YJIT project) shares the updates that have been made in this newest version of YJIT, and future plans for further optimization. How Good Documentation Can Improve Productivity https://shopify.engineering/good-documentation-productivity 2023-01-12T15:00:04.000Z 2023-01-12T15:00:04.000Z Good documentation has many benefits, but first and foremost it boosts engineers’ productivity. Here are a few tips to encourage a strong writing culture. From Ruby to Node: Overhauling Shopify’s CLI for a Better Developer Experience https://shopify.engineering/overhauling-shopify-cli-for-a-better-developer-experience 2023-01-10T13:00:01.000Z 2023-01-10T13:00:01.000Z In this blog post, Pedro explains why we rewrote Shopify CLI into Node instead of Ruby, the tradeoffs that came with the decision, the principles we embraced in this new iteration, and the challenges and ideas ahead of us to explore. Reliving Your Happiest HTTP Interactions with Ruby’s VCR Gem https://shopify.engineering/how-to-program-your-vcr 2023-01-05T14:00:00.000Z 2023-01-05T14:00:00.000Z VCR is a Ruby library that records HTTP interactions and plays them back to your test suite, verifying input and returning predictable output. If you're struggling with difficult to maintain mocks, misbehaving APIs or complex multi-step interactions and would like tests that are more reliable, faster, and easier to debug, VCR can help you get there. Here’s how. Monte Carlo Simulations: Separating Signal from Noise in Sampled Success Metrics https://shopify.engineering/monte-carlo-simulations-sampled-success-metrics 2023-01-03T12:20:27.000Z 2023-01-03T12:20:27.000Z React Native Skia: A Year in Review and a Look Ahead https://shopify.engineering/react-native-skia-2022 2022-12-29T15:30:00.000Z 2022-12-29T15:30:00.000Z Migrating our Largest Mobile App to React Native https://shopify.engineering/migrating-our-largest-mobile-app-to-react-native 2022-12-27T14:00:00.000Z 2022-12-27T14:00:00.000Z In 2020, we announced that React Native is the future of mobile at Shopify. As part of that journey, we’ve been migrating Shopify Mobile (our largest app at 300 screens per platform) from native to React Native. Here’s how it’s going. Optimizing Ruby’s Memory Layout: Variable Width Allocation https://shopify.engineering/ruby-variable-width-allocation 2022-12-25T05:01:01.000Z 2022-12-25T05:01:01.000Z Shopify is improving CRuby’s performance in Ruby 3.2 by optimizing the memory layout in the garbage collector through the Variable Width Allocation project. Year in Review 2022: Tenderlove's Ruby and Rails Reflections and Predictions https://shopify.engineering/ruby-rails-year-in-review-2022 2022-12-22T15:00:02.000Z 2022-12-22T15:00:02.000Z Senior Staff Engineer and Rails core team member Aaron Patterson recaps his favourite Ruby and Rails updates of 2022 and some predictions (okay, so maybe it’s more of a wish list) for 2023. Automatically Rotating GitHub Tokens (So You Don’t Have To) https://shopify.engineering/automatically-rotate-github-tokens 2022-12-20T15:00:01.000Z 2022-12-20T15:00:01.000Z We encountered a problem that lives in the gap between two tried-and-true GitHub authentication methods: personal access tokens and built-in authentication. Our solution? Build a system to automatically rotate GitHub access tokens. Here’s how we did it and how you can do it too. Shopify Embraces Rust for Systems Programming https://shopify.engineering/shopify-rust-systems-programming 2022-12-14T18:07:28.000Z 2022-12-14T18:07:28.000Z Shopify is adopting Rust as our systems programming language, and joining the Rust Foundation. 3 (More) Tips for Optimizing Apache Flink Applications https://shopify.engineering/optimizing-apache-flink-tips-part-two 2022-12-13T14:00:00.000Z 2022-12-13T14:00:00.000Z Three Essential Remote Work Practices for Engineering Teams https://shopify.engineering/three-essential-remote-work-practices-engineering 2022-12-08T16:08:51.000Z 2022-12-08T16:08:51.000Z It’s been around two and a half years since Shopify became a fully remote-first company. James Stanier shares three big learnings that are essential to succeeding remotely. Planning in Bets: Risk Mitigation at Scale https://shopify.engineering/risk-mitigation-at-scale 2022-12-06T22:07:13.000Z 2022-12-06T22:07:13.000Z What do you do with a finite amount of time to deal with an infinite number of things that can go wrong? This post breaks down a high-level risk mitigation process into four questions that can be applied to nearly any scenario in order to help you make the best use of your time and resources available. Using Server Sent Events to Simplify Real-time Streaming at Scale https://shopify.engineering/server-sent-events-data-streaming 2022-11-30T14:00:04.000Z 2022-11-30T14:00:04.000Z How to Export Datadog Metrics for Exploration in Jupyter Notebooks https://shopify.engineering/export-datadog-metrics-in-jupyter-notebooks 2022-11-29T11:53:22.000Z 2022-11-29T11:53:22.000Z Our Solution for Measuring React Native Rendering Times https://shopify.engineering/measuring-react-native-rendering-times 2022-11-24T16:09:36.000Z 2022-11-24T16:09:36.000Z After Shopify went all-in on React Native, we had to find a way to confirm our mobile apps are fast. The solution is an open-source @shopify/react-native-performance library, which measures rendering times in React Native apps. Implementing Server-Driven UI Architecture on the Shop App https://shopify.engineering/server-driven-ui-in-shop-app 2022-11-22T16:00:00.000Z 2022-11-22T16:00:00.000Z Ashwin explains why and how we implemented server-driven UI in the Shop App’s Store Screen, and his experience working on the project as a Dev Degree intern. What We Learned from Open-Sourcing FlashList https://shopify.engineering/what-we-learned-from-open-sourcing-flashlist 2022-11-17T16:00:01.000Z 2022-11-17T16:00:01.000Z Here's how we launched the React Native List library FlashList as an open-source project, and how you can make your next open-source project a success. Caching Without Marshal Part 2: The Path to MessagePack https://shopify.engineering/caching-without-marshal-part-two-messagepack 2022-11-15T15:00:00.000Z 2022-11-15T15:00:00.000Z Caching Without Marshal Part 1: Marshal from the Inside Out https://shopify.engineering/caching-without-marshal-part-one 2022-11-11T15:30:00.000Z 2022-11-11T15:30:00.000Z Apollo Cache is Your Friend, If You Get To Know It https://shopify.engineering/apollo-cache 2022-11-09T19:30:00.000Z 2022-11-09T19:30:00.000Z Shopify's Raman Lally delves into the Apollo GraphQL client cache and the life cycle of objects that are cached within it. Reducing BigQuery Costs: How We Fixed A $1 Million Query https://shopify.engineering/reducing-bigquery-costs 2022-11-03T18:14:51.000Z 2022-11-03T18:14:51.000Z Mixing It Up: Remix Joins Shopify to Push the Web Forward https://shopify.engineering/remix-joins-shopify 2022-10-31T14:00:02.000Z 2022-10-31T14:00:02.000Z At Shopify, the Remix open-source community has a strong sponsor and supporter that will enable the web framework to accelerate its roadmap. The Management Poles of Developer Infrastructure Teams https://shopify.engineering/management-poles-developer-infrastructure-teams 2022-10-28T17:00:00.000Z 2022-10-28T17:00:00.000Z A Software Engineer's Guide to Working Across Time Zones https://shopify.engineering/a-software-engineers-guide-to-working-across-time-zones 2022-10-27T01:31:45.000Z 2022-10-27T01:31:45.000Z A few tips to make asynchronous communication across time zones a positive experience Hubble: Our Tool for Encapsulating and Extending Security Tools https://shopify.engineering/hubble-encapsulation-extend-security 2022-10-21T17:55:34.000Z 2022-10-21T17:55:34.000Z How to Structure Your Data Team for Maximum Influence https://shopify.engineering/how-to-structure-data-teams 2022-10-20T17:00:06.000Z 2022-10-20T17:00:06.000Z Finding Relationships Between Ruby’s Top 100 Packages and Their Dependencies https://shopify.engineering/relationships-between-ruby-top-100-packages-dependencies 2022-10-19T19:17:49.000Z 2022-10-19T19:17:49.000Z On the Importance of Pull Request Discipline https://shopify.engineering/on-the-importance-of-pull-request-discipline 2022-10-13T14:00:00.000Z 2022-10-13T14:00:00.000Z Unorganized pull requests are the bane of large codebases. Follow Yash's tips to prevent your PRs from getting roasted in the group chat. How to Write Code Without Having to Read It https://shopify.engineering/write-code-without-reading-it 2022-10-11T18:00:00.000Z 2022-10-11T18:00:00.000Z The Engineering Story Behind Flex Comp https://shopify.engineering/building-flex-comp 2022-10-05T18:00:02.000Z 2022-10-05T18:00:02.000Z How we built Flex Comp: Shopify's new approach to compensation that gives employees the ability to choose how they want to allocate their total reward between base salary, Restricted Stock Units (RSUs), and Stock Options today, with new features like Shop Cash in the future. Safely Adding NOT NULL Columns to Your Database Tables https://shopify.engineering/add-not-null-colums-to-database 2022-10-04T15:00:00.000Z 2022-10-04T15:00:00.000Z Recommendations from Shopify's Data Migrations team for adding NOT NULL columns safely to your own database tables, based on a recent investigation into schema change safety using using the popular Large Hadron Migrator (LHM) gem. A Software Engineer’s Guide to Giving Feedback that Actually Matters https://shopify.engineering/software-engineers-guide-to-feedback-that-matters 2022-09-30T18:00:03.000Z 2022-09-30T18:00:03.000Z If you see something wrong in a codebase or architecture, and you don’t say something, you will suffer the consequences. Jack teaches how to give feedback that matters to get positive results. A Flexible Framework for Effective Pair Programming https://shopify.engineering/a-flexible-framework-for-effective-pair-programming 2022-09-27T18:59:15.000Z 2022-09-27T18:59:15.000Z Lessons From Building Android Widgets https://shopify.engineering/lessons-building-android-widgets 2022-09-22T18:15:00.000Z 2022-09-22T18:15:00.000Z Lessons From Building iOS Widgets https://shopify.engineering/lessons-building-ios-widgets 2022-09-22T13:30:00.000Z 2022-09-22T13:30:00.000Z What is a Full Stack Data Scientist? https://shopify.engineering/what-is-a-full-stack-data-scientist 2022-09-15T13:35:00.000Z 2022-09-15T13:35:00.000Z Managing React Form State Using the React-Form Library https://shopify.engineering/managing-react-form-state-using-react-form-library 2022-09-14T16:30:05.000Z 2022-09-14T16:30:05.000Z Leveraging Go Worker Pools to Scale Server-side Data Sharing https://shopify.engineering/leveraging-go-worker-pools 2022-09-09T15:00:00.000Z 2022-09-09T15:00:00.000Z Four Approaches to Debugging Server-side WebAssembly https://shopify.engineering/debugging-server-side-webassembly 2022-09-07T14:35:22.000Z 2022-09-07T14:35:22.000Z Shopify Functions enables customizing the business logic of Shopify’s back end with server-side WebAssembly. There are many benefits to using a WebAssembly environment to host these customizations such as low cold-start latency and robust security compared to other alternatives. However, WebAssembly poses new challenges when debugging. Focus On Behavior, Not State, for a More Maintainable Codebase https://shopify.engineering/behavior-not-state-for-maintainable-codebase 2022-09-01T16:00:04.000Z 2022-09-01T16:00:04.000Z How we moved from focusing on state (what an object is) towards behavior (what an object does) while building our Purchase Options APIs as a way to create a more maintainable codebase. RailsConf 2022: 10 Shopify Tech Talks You Might Have Missed https://shopify.engineering/railsconf-2022-10-shopify-tech-talks 2022-08-30T14:30:07.000Z 2022-08-30T14:30:07.000Z Watch Shopify's tech talent tackle topics ranging from virtual machines, performance improvements, and investing in open source teams When Culture and Code Reviews Collide, Communication is Key https://shopify.engineering/code-reviews-communication 2022-08-26T15:30:00.000Z 2022-08-26T15:30:00.000Z When we understand each other’s cultural context, the emphasis in code reviews can shift from confrontation to collaboration. Shopify Data’s Guide To Opportunity Sizing https://shopify.engineering/shopify-data-guide-opportunity-sizing 2022-08-25T15:30:00.000Z 2022-08-25T15:30:00.000Z How We Built Oxygen: Hydrogen’s Counterpart for Hosting Custom Storefronts https://shopify.engineering/how-we-built-oxygen 2022-08-23T16:30:01.000Z 2022-08-23T16:30:01.000Z How We Enable Two-Day Delivery in the Shopify Fulfillment Network https://shopify.engineering/two-day-delivery-shopify-fulfillment-network 2022-08-18T18:30:22.000Z 2022-08-18T18:30:22.000Z Instant Performance Upgrade: From FlatList to FlashList https://shopify.engineering/instant-performance-upgrade-flatlist-flashlist 2022-08-17T14:53:56.000Z 2022-08-17T14:53:56.000Z When is JIT Faster Than A Compiler? https://shopify.engineering/when-jit-faster-than-compiler 2022-08-11T14:00:02.000Z 2022-08-11T14:00:02.000Z Six Tips for Staying Technical as a CTO https://shopify.engineering/six-tips-staying-technical-cto 2022-08-09T14:00:03.000Z 2022-08-09T14:00:03.000Z Here's what’s on my mind as a technical leader: How do I gain the credibility of the smart people on my team who are far more technical and detailed than I am, in order to lead them? Spin Cycle: Shopify’s SFN Team Overcomes a Cloud-Development Spiral https://shopify.engineering/sfn-team-cloud-development-spin 2022-08-04T17:30:00.000Z 2022-08-04T17:30:00.000Z Mastering React’s Stable Values https://shopify.engineering/master-reacts-stable-values 2022-08-02T16:06:15.000Z 2022-08-02T16:06:15.000Z The concept of stable value is a distinctly React term, and especially relevant since the introduction of Functional Components. It refers to values (usually coming from a hook) that have the same value across multiple renders. And they’re immediately confusing. In this post, Colin Gray, Principal Developer at Shopify, walks through some cases where they really matter and how to make sense of them. 10 Tips for Building Resilient Payment Systems https://shopify.engineering/building-resilient-payment-systems 2022-07-28T17:00:00.000Z 2022-07-28T17:00:00.000Z The top 10 tips and tricks for building resilient payment systems from a Staff Developer working on Shopify’s payment infrastructure. Data-Centric Machine Learning: Building Shopify Inbox’s Message Classification Model https://shopify.engineering/shopify-inbox-message-classification-model 2022-07-21T17:00:03.000Z 2022-07-21T17:00:03.000Z 5 Steps to Bounce Back from a Negative Performance Review https://shopify.engineering/five-steps-to-better-performance-reviews 2022-07-20T17:00:02.000Z 2022-07-20T17:00:02.000Z Ebun breaks down how she used a not-so-great performance review to set clear development goals for herself and increase alignment with her lead, ultimately leading to a successful next review. Spin Infrastructure Adventures: Containers, Systemd, and CGroups https://shopify.engineering/spin-infrastructure-adventures-containers-systemd-cgroups 2022-07-15T16:45:02.000Z 2022-07-15T16:45:02.000Z Shopify’s Technical Interview Process: What to Expect and How to Prepare https://shopify.engineering/nail-your-technical-shopify-interview 2022-07-07T14:00:00.000Z 2022-07-07T14:00:00.000Z The interview process can be one of the most daunting aspects of finding a new gig—but it doesn’t have to be. This guide pulls back the curtain on what to expect during the interview process for technical roles at Shopify and sets you up for success with tips for each stage. Shopify and Open Source: A Mutually Beneficial Relationship https://shopify.engineering/shopify-open-source-philosophy 2022-07-06T16:45:00.000Z 2022-07-06T16:45:00.000Z The Story Behind Shopify’s Isospin Tooling https://shopify.engineering/shopify-isospin-cloud-development-tooling 2022-07-05T17:00:01.000Z 2022-07-05T17:00:01.000Z How to Build Trust as a New Manager in a Fully Remote Team https://shopify.engineering/90-day-plan-building-trust-remote-team 2022-06-30T16:00:00.000Z 2022-06-30T16:00:00.000Z Navigating Recurring Payments in India: A Backend Perspective https://shopify.engineering/technology-behind-navigating-recurring-payments-india 2022-06-29T18:08:33.000Z 2022-06-29T18:08:33.000Z To address the new RBI framework for recurring payments in Shopify’s billing platform, we worked with a local payment provider that could accommodate both card-based payments as well as a local payment method called Unified Payments Interface (UPI). Perspectives on Onboarding: Joining Shopify as an Engineering Leader https://shopify.engineering/onboarding-shopify-engineering-leaders 2022-06-27T14:00:01.000Z 2022-06-27T14:00:01.000Z What’s it really like for new engineering leaders at Shopify? I asked Avanti Ketkar and Maria Robledo, who both joined the team this past year, to spill the tea about their first few months. They share their perspectives on how the onboarding experience helped them build context, relationships, and trust. Introducing ShopifyQL: Our New Commerce Data Querying Language  https://shopify.engineering/shopify-commerce-data-querying-language-shopifyql 2022-06-22T13:00:01.000Z 2022-06-22T13:00:01.000Z How We Built Hydrogen: A React Framework for Building Custom Storefronts https://shopify.engineering/how-we-built-hydrogen 2022-06-22T13:00:00.000Z 2022-06-22T13:00:00.000Z We’ve been building Hydrogen for more than a year. Here’s a look behind the scenes at how we did it, what we learned from making big bets, and what it was like building a new framework from the ground up on experimental technology. Making Open Source Safer for Everyone with Shopify’s Bug Bounty Program https://shopify.engineering/shopify-making-open-source-safer 2022-06-15T18:00:02.000Z 2022-06-15T18:00:02.000Z Zack Deveau, Senior Application Security Engineer at Shopify, shares the details behind a recent contribution to the Rails library, inspired by a bug bounty report we received. He'll go over the report and its root cause, how we fixed it in our system, and how we took it a step further to make Rails more secure by updating the default serializer for a few classes to use safe defaults. How We Built Shopify Party https://shopify.engineering/how-we-built-shopify-party 2022-06-14T14:00:00.000Z 2022-06-14T14:00:00.000Z Shopify Party is a browser-based internal tool that we built to make our virtual hangouts more fun. With Shopify’s move to remote, we wanted to explore how to give people a break from video fatigue and create a new space designed for social interaction. Here's how we built it. 8 Data Conferences Shopify Data Thinks You Should Attend https://shopify.engineering/data-conferences-shopify-data-thinks-you-should-attend 2022-06-10T13:58:09.000Z 2022-06-10T13:58:09.000Z The Journey to Cloud Development: How Shopify Went All-in on Spin https://shopify.engineering/shopifys-cloud-development-journey 2022-06-09T20:00:00.000Z 2022-06-09T20:00:00.000Z How we reinvented our developer environment by going cloud native to keep up with increasing complexity and exponential growth. Building a Form with Polaris https://shopify.engineering/building-polaris-form 2022-06-01T15:30:00.000Z 2022-06-01T15:30:00.000Z To Thread or Not to Thread: An In-Depth Look at Ruby’s Execution Models https://shopify.engineering/ruby-execution-models 2022-05-31T14:00:00.000Z 2022-05-31T14:00:00.000Z Implementing Equality in Ruby https://shopify.engineering/implementing-equality-in-ruby 2022-05-26T14:00:01.000Z 2022-05-26T14:00:01.000Z Our Favorite Moments From RailsConf 2022 https://shopify.engineering/our-favorite-moments-from-railsconf-2022 2022-05-24T21:53:13.000Z 2022-05-24T21:53:13.000Z The Rails community gathered in Portland for the first in-person RailsConf in two years. Shopify developers recap a few highlights from the three-day event. Lessons Learned From Running Apache Airflow at Scale https://shopify.engineering/lessons-learned-apache-airflow-scale 2022-05-23T14:00:01.000Z 2022-05-23T14:00:01.000Z Asynchronous Communication is the Great Leveler in Engineering https://shopify.engineering/asynchronous-communication-shopify-engineering 2022-05-20T16:57:19.000Z 2022-05-20T16:57:19.000Z Double Entry Transition Tables: How We Track State Changes At Shopify https://shopify.engineering/double-entry-transition-tables-shopify 2022-05-18T13:30:00.000Z 2022-05-18T13:30:00.000Z Shopify Invests in Research for Ruby at Scale https://shopify.engineering/shopify-ruby-at-scale-research-investment 2022-05-16T14:00:02.000Z 2022-05-16T14:00:02.000Z Maestro: The Orchestration Language Powering Shopify Flow https://shopify.engineering/maestro-the-orchestration-language-powering-shopify-flow 2022-05-13T18:45:00.000Z 2022-05-13T18:45:00.000Z Our Experience Porting the YJIT Ruby Compiler to Rust https://shopify.engineering/porting-yjit-ruby-compiler-to-rust 2022-05-11T14:00:01.000Z 2022-05-11T14:00:01.000Z In this post, I want to give a nuanced perspective on our experience porting YJIT from C to Rust. I'll talk about the positives, but also discuss the things that we found challenging or suboptimal in our experience. Talk Nerdy to Me: 10 Tech Podcast Recommendations from Shopify Engineering https://shopify.engineering/ten-nerdy-tech-podcasts 2022-05-06T14:30:00.000Z 2022-05-06T14:30:00.000Z We asked our tech talent which podcasts they’re tuning into and curated a list of their favorites. Whether you’re in the mood for something quick and informative, or witty and conversational, we think you’ll find something on this list you’ll enjoy. React Native Skia—For Us, For You, and For Fun https://shopify.engineering/react-native-skia-shopify 2022-04-29T16:00:01.000Z 2022-04-29T16:00:01.000Z Data Is An Art, Not Just A Science—And Storytelling Is The Key https://shopify.engineering/data-storytelling-shopify 2022-04-27T19:45:01.000Z 2022-04-27T19:45:01.000Z Building a Business System Integration and Automation Platform at Shopify https://shopify.engineering/rails-business-systems-intergration-platform 2022-04-22T20:10:20.000Z 2022-04-22T20:10:20.000Z Möbius: Shopify’s Unified Edge https://shopify.engineering/mobius-shopify-unified-edge 2022-04-20T18:30:00.000Z 2022-04-20T18:30:00.000Z Code Ranges: A Deeper Look at Ruby Strings https://shopify.engineering/code-ranges-ruby-strings 2022-04-14T20:39:18.000Z 2022-04-14T20:39:18.000Z Leveraging Shopify’s API to Build the Latest Marketplace Kit https://shopify.engineering/shopify-api-build-latest-marketplace-kit 2022-04-08T21:03:16.000Z 2022-04-08T21:03:16.000Z The Magic of Merlin: Shopify's New Machine Learning Platform https://shopify.engineering/merlin-shopify-machine-learning-platform 2022-04-06T13:30:00.000Z 2022-04-06T13:30:00.000Z Best-in-Class Developer Experience with Vite and Hydrogen https://shopify.engineering/developer-experience-with-hydrogen-and-vite 2022-03-31T13:00:02.000Z 2022-03-31T13:00:02.000Z 10 Books Shopify’s Tech Talent Think You Should Read https://shopify.engineering/shopify-tech-talent-book-recommendations 2022-03-29T21:12:46.000Z 2022-03-29T21:12:46.000Z How We Built the Add to Favorite Animation in Shop https://shopify.engineering/building-add-to-favorite-animation-shop-app 2022-03-25T15:11:59.000Z 2022-03-25T15:11:59.000Z A Data Scientist’s Guide To Measuring Product Success https://shopify.engineering/a-data-scientist-s-guide-to-measuring-product-success 2022-03-23T20:27:11.000Z 2022-03-23T20:27:11.000Z If you’re a data scientist on a product team, much of your work involves getting a product ready for release. You may conduct exploratory data analyses to understand your product’s market, or build the data models and pipelines needed to power a new product feature, or design a machine learning model to unlock new product functionality. But your work doesn’t end once a product goes live. After a product is released, it’s your job to help identify if your product is a success. Shopify’s Bug Bounty Program Raises Maximum Payout in 2022 https://shopify.engineering/shopify-bug-bounty-program-maximum-payout-2022 2022-03-22T18:56:46.000Z 2022-03-22T18:56:46.000Z In 2022, Shopify's Bug Bounty Program is doubling the maximum reward to $100,000 and moving key services into the highest severity level. Using Terraform to Manage Infrastructure https://shopify.engineering/manage-infrastructure-with-terraform 2022-03-17T20:37:36.000Z 2022-03-17T20:37:36.000Z Creating a React Library for Consistent Data Visualization https://shopify.engineering/react-library-consistent-data-visualization 2022-03-15T22:38:56.000Z 2022-03-15T22:38:56.000Z After the Refactor: A Path to Faster Rendering with Liquid-C https://shopify.engineering/refactor-path-to-faster-rendering-liquid-c 2022-03-10T22:13:54.000Z 2022-03-10T22:13:54.000Z Not every feature of open-source template language Liquid has been ported over to Liquid-C, such as the If tag and For Tag. I started to look into how to compile Liquid’s If tag from Liquid-C, a process that would improve parsing time. 7 Tips For Optimizing Apache Flink Applications https://shopify.engineering/optimizing-apache-flink-applications-tips 2022-03-08T21:20:39.000Z 2022-03-08T21:20:39.000Z We’ve spent a lot of time on performance tuning our Apache Flink application. We’ll walk you through key lessons for optimizing large stateful Apache Flink applications. Test Budget: Time Constrained CI Feedback https://shopify.engineering/test-budget-time-constrained-ci-feedback 2022-03-07T15:00:00.000Z 2022-03-07T15:00:00.000Z Adding the V8 CPU Profiler to v8go https://shopify.engineering/adding-v8-cpu-profiler-v8go 2022-03-04T15:10:36.000Z 2022-03-04T15:10:36.000Z RubyConf 2021: The Talks You Might Have Missed https://shopify.engineering/rubyconf-2021-the-talks-you-might-have-missed 2022-03-02T21:55:26.000Z 2022-03-02T21:55:26.000Z How to Get an Engineering Internship at Shopify: A Complete Guide https://shopify.engineering/shopify-engineering-internship-guide 2022-02-18T18:30:00.000Z 2022-02-18T18:30:00.000Z Changing a polymorphic_type in Rails https://shopify.engineering/changing-polymorphic-type-rails 2022-02-18T16:57:47.000Z 2022-02-18T16:57:47.000Z We Want Your Feedback for the Shopify Engineering Blog https://shopify.engineering/shopify-engineering-blog-survey 2022-02-14T18:00:00.000Z 2022-02-14T18:00:00.000Z Shopify's Playbook for Scaling Machine Learning https://shopify.engineering/shopify-playbook-scaling-machine-learning 2022-02-11T19:30:01.000Z 2022-02-11T19:30:01.000Z Hydrogen & Tailwind: The Perfect Match for Building Beautiful Storefronts https://shopify.engineering/hydrogen-tailwind-building-beautiful-storefronts 2022-02-11T16:15:00.000Z 2022-02-11T16:15:00.000Z React Server Components Best Practices You Can Use with Hydrogen https://shopify.engineering/react-server-components-best-practices-hydrogen 2022-02-04T17:30:00.000Z 2022-02-04T17:30:00.000Z Rapid Development with Hydrogen: Building a Product Page https://shopify.engineering/rapid-development-hydrogen-building-product-page 2022-02-02T15:30:01.000Z 2022-02-02T15:30:01.000Z How We Fixed the Dependency Confusion Vulnerability in Over 600 Ruby Applications https://shopify.engineering/fixing-dependency-confusion-ruby-applications 2022-01-27T15:42:25.000Z 2022-01-27T15:42:25.000Z Cloud, Load, and Modular Code: What 2022 Looks Like for Shopify https://shopify.engineering/cloud-load-modular-code-shopify-2022 2022-01-20T23:24:21.000Z 2022-01-20T23:24:21.000Z Search at Shopify—Range in Data and Engineering is the Future https://shopify.engineering/search-at-shopify 2022-01-14T17:30:01.000Z 2022-01-14T17:30:01.000Z That Old Certificate Expired and Started an Outage. This is What Happened Next https://shopify.engineering/that-old-certificate-expired-and-started-an-outage-this-is-what-happened-next 2022-01-12T15:30:02.000Z 2022-01-12T15:30:02.000Z Nerd Out on 10 of Our Favorite Posts From 2021 https://shopify.engineering/10-favorite-posts-2021 2021-12-29T15:00:00.000Z 2021-12-29T15:00:00.000Z Shopify’s Unique Data Science Hierarchy Of Needs https://shopify.engineering/shopify-unique-data-science-hierarchy-of-needs 2021-12-21T18:32:40.000Z 2021-12-21T18:32:40.000Z Building a Real-time Buyer Signal Data Pipeline for Shopify Inbox https://shopify.engineering/real-time-buyer-signal-data-pipeline-shopify-inbox 2021-12-13T21:24:33.000Z 2021-12-13T21:24:33.000Z Scaling Shopify's BFCM Live Map: An Apache Flink Redesign https://shopify.engineering/bfcm-live-map-2021-apache-flink-redesign 2021-12-10T19:00:00.000Z 2021-12-10T19:00:00.000Z Upgrading MySQL at Shopify https://shopify.engineering/upgrading-mysql-shopify 2021-12-02T17:30:00.000Z 2021-12-02T17:30:00.000Z Remote rendering: Shopify’s take on extensible UI https://shopify.engineering/remote-rendering-ui-extensibility 2021-12-01T16:30:00.000Z 2021-12-01T16:30:00.000Z A deep dive into the latest generation of our technology that allows developers to extend Shopify’s UI. Building an App Clip with React Native https://shopify.engineering/building-app-clip-react-native 2021-11-26T16:39:45.000Z 2021-11-26T16:39:45.000Z Five Tips for Growing Your Engineering Career https://shopify.engineering/five-tips-for-engineer-career-growth 2021-11-25T17:54:54.000Z 2021-11-25T17:54:54.000Z The beginning stages of a career in engineering can be daunting. You’re trying to make the most of the opportunity at your new job and learning as much as you can, and as a result, it can be hard to find time and energy to focus on growth. Here are five practical tips that can help you grow as you navigate your engineering career. Using Propensity Score Matching to Uncover Shopify Capital’s Effect on Business Growth https://shopify.engineering/propensity-score-matching-shopify-capital 2021-11-11T20:45:00.000Z 2021-11-11T20:45:00.000Z Building Blocks of High Performance Hydrogen-powered Storefronts https://shopify.engineering/high-performance-hydrogen-powered-storefronts 2021-11-08T14:00:01.000Z 2021-11-08T14:00:01.000Z The Vitality of Core Web Vitals https://shopify.engineering/core-web-vitals 2021-11-04T18:30:00.000Z 2021-11-04T18:30:00.000Z Always on Calibration with a Quarterly Summary https://shopify.engineering/quarterly-calibration-document 2021-11-02T13:14:11.000Z 2021-11-02T13:14:11.000Z The AWARE Development Plan https://shopify.engineering/aware-development-plan 2021-10-28T20:00:01.000Z 2021-10-28T20:00:01.000Z Shopify's Path to a Faster Trino Query Execution: Custom Verification, Benchmarking, and Profiling Tooling https://shopify.engineering/faster-trino-query-execution-verification-benchmarking-profiling 2021-10-27T18:27:09.000Z 2021-10-27T18:27:09.000Z Debugging Systems in the Cloud: MySQL, Kubernetes, and Cgroups https://shopify.engineering/debugging-systems-cloud-mysql-kubernetes-cgroups 2021-10-21T17:30:01.000Z 2021-10-21T17:30:01.000Z GitHub Does My Operations Homework: A Ruby Speed Story https://shopify.engineering/yjit-benchmarking-harness 2021-10-19T18:41:07.000Z 2021-10-19T18:41:07.000Z Try Out YJIT for Faster Rubying https://shopify.engineering/yjit-faster-rubying 2021-10-15T18:30:01.000Z 2021-10-15T18:30:01.000Z YJIT: Building a New JIT Compiler for CRuby https://shopify.engineering/yjit-just-in-time-compiler-cruby 2021-10-14T18:30:00.000Z 2021-10-14T18:30:00.000Z Winning AI4TSP: Solving the Travelling Salesperson Problem with Self-programming Machines https://shopify.engineering/travelling-salesperson-problem-ai4tsp 2021-10-06T14:30:00.000Z 2021-10-06T14:30:00.000Z Journey Through a Dev Degree Intern’s First Placement https://shopify.engineering/dev-degree-intern-journey 2021-10-01T17:00:01.000Z 2021-10-01T17:00:01.000Z Reusing Code with React Native Packages at Shopify https://shopify.engineering/react-native-packages-shopify 2021-09-29T14:30:01.000Z 2021-09-29T14:30:01.000Z Shard Balancing: Moving Shops Confidently with Zero-Downtime at Terabyte-scale https://shopify.engineering/mysql-database-shard-balancing-terabyte-scale 2021-09-24T20:41:32.000Z 2021-09-24T20:41:32.000Z Moving a shop from one shard to another requires engineering solutions around large, interconnected systems. The flexibility to move shops from shard to shard allows Shopify to provide a stable, well-balanced infrastructure for our merchants. With merchants creating their livelihood on the platform, it’s more important than ever that Shopify remains a sturdy backbone. High-confidence shard rebalancing is simply one of the ways we can do this. Making Shopify’s Flagship App 20% Faster in 6 Weeks Using a Novel Caching Solution https://shopify.engineering/shop-app-custom-caching-solution 2021-09-22T17:30:00.000Z 2021-09-22T17:30:00.000Z Using Rich Image and Text Data to Categorize Products at Scale https://shopify.engineering/using-rich-image-text-data-categorize-products 2021-09-08T14:30:00.000Z 2021-09-08T14:30:00.000Z A Kotlin Style .copy Function for Swift Structs https://shopify.engineering/kotlin-style-copy-function-swift-structs 2021-09-02T15:00:02.000Z 2021-09-02T15:00:02.000Z 5 Steps for Building Machine Learning Models for Business https://shopify.engineering/building-business-machine-learning-models 2021-08-25T17:30:00.000Z 2021-08-25T17:30:00.000Z Diggin’ and Fetchin’ with TruffleRuby https://shopify.engineering/dig-fetch-truffleruby 2021-08-20T15:00:00.000Z 2021-08-20T15:00:00.000Z Modelling Developer Infrastructure Teams https://shopify.engineering/modelling-developer-infrastructure-teams 2021-08-13T13:00:00.000Z 2021-08-13T13:00:00.000Z Bridging the Gap Between Developers and End Users https://shopify.engineering/bridging-gap-between-developers-and-users 2021-08-11T19:32:38.000Z 2021-08-11T19:32:38.000Z Understanding GraphQL for Beginners–Part Three https://shopify.engineering/understanding-graphql-for-beginners-part-three 2021-08-06T15:30:00.000Z 2021-08-06T15:30:00.000Z Connecting with Mob Programming https://shopify.engineering/mob-programming 2021-07-30T14:09:14.000Z 2021-07-30T14:09:14.000Z A Guide to Running an Engineering Program https://shopify.engineering/running-engineering-program-guide 2021-07-21T20:00:01.000Z 2021-07-21T20:00:01.000Z Perspectives on React Native from Three Shopify Developers https://shopify.engineering/react-native-perspectives 2021-07-16T13:00:00.000Z 2021-07-16T13:00:00.000Z Shopify-Made Patterns in Our Rails Apps https://shopify.engineering/shopify-made-patterns-in-our-rails-apps 2021-07-13T17:26:49.000Z 2021-07-13T17:26:49.000Z Shopify's Path to a Faster Trino Query Execution: Infrastructure https://shopify.engineering/faster-trino-query-execution-infrastructure 2021-07-09T14:30:02.000Z 2021-07-09T14:30:02.000Z High Availability by Offloading Work Into the Background https://shopify.engineering/high-availability-background-jobs 2021-07-08T18:00:01.000Z 2021-07-08T18:00:01.000Z Understanding GraphQL for Beginners–Part Two https://shopify.engineering/understanding-graphql-beginner-part-two 2021-07-02T20:00:43.000Z 2021-07-02T20:00:43.000Z Understanding GraphQL for Beginners–Part One https://shopify.engineering/understanding-graphql-beginner-part-one 2021-07-02T16:36:21.000Z 2021-07-02T16:36:21.000Z Let’s Encrypt x Shopify: Securing the Web 4.5 Million Domains at a Time https://shopify.engineering/securing-shopify-domains-letsencrypt 2021-06-24T18:30:02.000Z 2021-06-24T18:30:02.000Z Rate Limiting GraphQL APIs by Calculating Query Complexity https://shopify.engineering/rate-limiting-graphql-apis-calculating-query-complexity 2021-06-22T18:30:02.000Z 2021-06-22T18:30:02.000Z 10 Lessons Learned From Online Experiments https://shopify.engineering/lessons-learned-online-experiments 2021-06-17T18:15:21.000Z 2021-06-17T18:15:21.000Z Querying Strategies for GraphQL Clients https://shopify.engineering/querying-strategies-graphql-clients 2021-06-15T16:30:29.000Z 2021-06-15T16:30:29.000Z Schematizing Deletion at Scale https://shopify.engineering/managing-pii-shopify-scale 2021-06-10T15:30:00.000Z 2021-06-10T15:30:00.000Z Updating Illustrations at Scale https://shopify.engineering/updating-illustrations-shopify-scale 2021-06-03T20:48:53.000Z 2021-06-03T20:48:53.000Z The Polaris team creates tools, education and documentation that helps unite teams across Shopify to build better experiences. We created Polaris, our design system, and continue to maintain it. We are a multidisciplinary team with a range of experience. Some people have been at Shopify for over 6 years and others, like me, are a part of our Dev Degree program. Shipit! Presents: How We Write React Native Apps https://shopify.engineering/shipit-writing-react-native-apps 2021-05-27T15:31:44.000Z 2021-05-27T15:31:44.000Z How Shopify Built An In-Context Analytics Experience https://shopify.engineering/shopify-in-context-analytics 2021-05-25T19:30:00.000Z 2021-05-25T19:30:00.000Z Other Driven Developments https://shopify.engineering/other-driven-developments 2021-05-21T17:30:00.000Z 2021-05-21T17:30:00.000Z Mental models within an industry, company, or even a person, change constantly. As methodologies mature, we see the long term effects our choices have wrought and can adjust accordingly. As a team or company grows, methodologies that worked well for five people may not work as well for 40 people. If all employees could keep an entire app in their head, we’d need fewer rules and checks and balances on our development, but that is not the case. As a result, we summarize things we notice have been implicit in our work. Three Ways We Share Context at Shopify Engineering https://shopify.engineering/sharing-developer-context 2021-05-13T16:30:00.000Z 2021-05-13T16:30:00.000Z How I Define My Boundaries to Prevent Burnout https://shopify.engineering/define-boundaries-prevent-burnout 2021-05-06T15:15:54.000Z 2021-05-06T15:15:54.000Z There’s a way to build a model for your life and the other demands on you. It doesn’t have to be 100 hours a week. It might not even be 40 hours a week. Whatever sustainable model you come up with, prioritize fiercely and communicate expectations accordingly. I’ve worked this way for three decades through different phases of my life. The hours have changed, but the basic model and principles remain the same: Define the time, prioritize the work, and communicate those two effectively. A Five-Step Guide for Conducting Exploratory Data Analysis https://shopify.engineering/conducting-exploratory-data-analysis 2021-04-28T19:43:52.000Z 2021-04-28T19:43:52.000Z Dynamic ProxySQL Query Rules https://shopify.engineering/dynamic-proxysql-query-rules 2021-04-20T19:00:00.000Z 2021-04-20T19:00:00.000Z ProxySQL comes with a powerful feature called query rules. The main use of these rules at Shopify is to reroute, rewrite, or reject queries matching a specified regex. However, with great power comes great responsibility. These rules are powerful and can have unexpected consequences if used incorrectly. At Shopify’s scale, we’re running thousands of ProxySQL instances, so applying query rules to each one is a painful and time consuming process, especially during an incident. We’ve built a tool to help us address these challenges and make deploying new rules safe and scalable. Management of Native Code and React Native at Shopify https://shopify.engineering/managing-native-code-react-native 2021-04-16T14:30:52.000Z 2021-04-16T14:30:52.000Z A year ago, we announced our decision to place our bets, and our developer resources, on React Native. As you could expect, the move was met internally with a mix of excitement and apprehension, but a year later, we are still convinced that we made the right decision. How Shopify Dynamically Routes Storefront Traffic https://shopify.engineering/dynamically-route-storefront-traffic 2021-04-09T20:19:44.000Z 2021-04-09T20:19:44.000Z Building Smarter Search Products: 3 Steps for Evaluating Search Algorithms https://shopify.engineering/evaluating-search-algorithms 2021-04-01T18:45:00.000Z 2021-04-01T18:45:00.000Z How to Build a Web App with and without Rails Libraries https://shopify.engineering/building-web-app-ruby-rails 2021-03-26T16:18:36.000Z 2021-03-26T16:18:36.000Z How would we build a web application only using the standard Ruby libraries? In this article, I’ll break down the key foundational concepts of how a web application works while building one from the ground up. If we can build a web application only using Ruby libraries, why would we need web server interfaces like Rack and web applications like Ruby on Rails? By the end of this article, you’ll gain a new appreciation for Rails and its magic. Remove Circular Dependencies by Using Dependency Injection and the Repository Pattern in Ruby https://shopify.engineering/repository-pattern-ruby 2021-03-19T15:00:00.000Z 2021-03-19T15:00:00.000Z There are dependencies between gems and the platforms that use them. In scenarios where the platforms have the data and the gem has the knowledge, there is a direct circular dependency between the two and both need to talk to each other. I’ll show you how we used the Repository pattern in Ruby to remove that circular dependency and help us make gems thin and stateless. Plus, I’ll show you how using Sorbet in the implementation made our code typed and cleaner. Capturing Every Change From Shopify’s Sharded Monolith https://shopify.engineering/capturing-every-change-shopify-sharded-monolith 2021-03-12T18:51:39.000Z 2021-03-12T18:51:39.000Z Shopify is moving from existing query-based CDC (Change-Data Capture) tooling (Longboat) to an immutable, append-only, log-based mechanism. This has required a complete re-platforming, involving a shift to new, open source technology such as Kafka Connect and Debezium. Updates on Shopify’s Bug Bounty Program https://shopify.engineering/shopify-bug-bounty-updates-2021 2021-03-11T20:56:28.000Z 2021-03-11T20:56:28.000Z For three years we, Shopify’s Application Security team, have set aside time to reflect on our bug bounty program and share recent insights. This past year has been quite a ride, as our program has been busier than ever! We’re excited to share what we have learned, and share some of the great things we have planned! 4 Tips for Shipping Data Products Fast https://shopify.engineering/shipping-data-products-fast 2021-03-02T19:00:00.000Z 2021-03-02T19:00:00.000Z Keeping Developers Happy with a Fast CI https://shopify.engineering/faster-shopify-ci 2021-02-24T15:44:31.000Z 2021-02-24T15:44:31.000Z Slow CI systems are often responsible for making frustrated developers. Keeping these systems fast requires an ongoing effort. However, before jumping into implementing performance tweaks, it's important to set up a solid monitoring system. Read Consistency with Database Replicas https://shopify.engineering/read-consistency-database-replicas 2021-02-22T21:55:03.000Z 2021-02-22T21:55:03.000Z Bound to Round: 8 Tips for Dealing with Hanging Pennies https://shopify.engineering/eight-tips-for-hanging-pennies 2021-02-16T19:45:41.000Z 2021-02-16T19:45:41.000Z Using Betas to Deploy New Features Safely https://shopify.engineering/using-betas-to-deploy-new-features-safely 2021-02-12T20:10:34.000Z 2021-02-12T20:10:34.000Z For companies like Shopify that practice continuous deployment, our code is changing multiple times every day. We have to de-risk new features to ship safely and confidently without impacting the million+ merchants using our platform. Beta flags are one approach to feature development that gives us a number of notable advantages. Technical Mentorship Reimagined: Time-bound and No Awkward Asks Necessary https://shopify.engineering/technical-mentorship-reimagined 2021-02-10T17:35:22.000Z 2021-02-10T17:35:22.000Z How to Make Dashboards Using a Product Thinking Approach https://shopify.engineering/make-dashboards-using-product-thinking-approach 2021-01-28T20:45:00.000Z 2021-01-28T20:45:00.000Z Managing Google Cloud Platform Project-Wide SSH Keys https://shopify.engineering/managing-google-cloud-platform-project-wide-ssh-keys 2021-01-27T16:37:04.000Z 2021-01-27T16:37:04.000Z As a member of the Infrastructure Security team, Cailyn set out to create an application to silently and effectively manage SSH keys that persist inside of Shopify's Google Cloud Platform project-wide metadata. Using GraphQL for High-Performing Mobile Applications https://shopify.engineering/using-graphql-for-high-performing-mobile-applications 2021-01-22T21:29:18.000Z 2021-01-22T21:29:18.000Z Apache Beam for Search: Getting Started by Hacking Time https://shopify.engineering/apache-beam-for-search-getting-started-by-hacking-time 2021-01-08T15:00:01.000Z 2021-01-08T15:00:01.000Z How Shopify Uses WebAssembly Outside of the Browser https://shopify.engineering/shopify-webassembly 2020-12-18T16:30:00.000Z 2020-12-18T16:30:00.000Z Simplify, Batch, and Cache: How We Optimized Server-side Storefront Rendering https://shopify.engineering/simplify-batch-cache-optimized-server-side-storefront-rendering 2020-12-10T21:52:36.000Z 2020-12-10T21:52:36.000Z Resiliency Planning for High-Traffic Events https://shopify.engineering/resiliency-planning-for-high-traffic-events 2020-12-10T20:03:05.000Z 2020-12-10T20:03:05.000Z How to Reliably Scale Your Data Platform for High Volumes https://shopify.engineering/reliably-scale-data-platform 2020-12-08T17:30:29.000Z 2020-12-08T17:30:29.000Z The State of Ruby Static Typing at Shopify https://shopify.engineering/the-state-of-ruby-static-typing-at-shopify 2020-12-07T19:42:31.000Z 2020-12-07T19:42:31.000Z Organizing 2000 Developers for BFCM in a Remote World https://shopify.engineering/organizing-2000-developers-bfcm-remotely 2020-12-07T18:00:00.000Z 2020-12-07T18:00:00.000Z A World Rendered Beautifully: The Making of the BFCM 3D Data Visualization https://shopify.engineering/bfcm-3d-data-visualization 2020-12-04T15:20:30.000Z 2020-12-04T15:20:30.000Z Capacity Planning at Scale https://shopify.engineering/capacity-planning-shopify 2020-12-03T18:00:01.000Z 2020-12-03T18:00:01.000Z Pummelling the Platform–Performance Testing Shopify https://shopify.engineering/performance-testing-shopify 2020-12-02T16:53:57.000Z 2020-12-02T16:53:57.000Z Vouching for Docker Images https://shopify.engineering/voucher-docker-images 2020-12-01T15:00:01.000Z 2020-12-01T15:00:01.000Z How to Build a Production Grade Workflow with SQL Modelling https://shopify.engineering/build-production-grade-workflow-sql-modelling 2020-11-19T19:37:29.000Z 2020-11-19T19:37:29.000Z Adopting Sorbet at Scale https://shopify.engineering/adopting-sorbet 2020-11-19T17:36:12.000Z 2020-11-19T17:36:12.000Z Static Typing for Ruby https://shopify.engineering/static-typing-ruby 2020-11-19T17:08:36.000Z 2020-11-19T17:08:36.000Z How to Introduce Composite Primary Keys in Rails https://shopify.engineering/how-to-introduce-composite-primary-keys-in-rails 2020-10-29T19:00:36.000Z 2020-10-29T19:00:36.000Z Building Mental Models of Ideas That Don’t Change https://shopify.engineering/building-mental-models 2020-10-22T17:00:00.000Z 2020-10-22T17:00:00.000Z How to Do an In-depth Liquid Render Analysis with Theme Inspector https://shopify.engineering/in-depth-liquid-render-analysis-shopify-theme-inspector-chrome-extension 2020-10-20T17:45:00.000Z 2020-10-20T17:45:00.000Z How to Build an Experiment Pipeline from Scratch https://shopify.engineering/build-experiment-pipeline-from-scratch 2020-10-15T15:41:54.000Z 2020-10-15T15:41:54.000Z Images as Code: Representing Localized and Evolving Products on Marketing Pages https://shopify.engineering/images-code-representing-localized-evolving-products-marketing-pages 2020-10-07T17:00:00.000Z 2020-10-07T17:00:00.000Z How to Use Quasi-experiments and Counterfactuals to Build Great Products https://shopify.engineering/using-quasi-experiments-counterfactuals 2020-09-28T18:29:06.000Z 2020-09-28T18:29:06.000Z Enforcing Modularity in Rails Apps with Packwerk https://shopify.engineering/enforcing-modularity-rails-apps-packwerk 2020-09-23T17:52:07.000Z 2020-09-23T17:52:07.000Z Under Deconstruction: The State of Shopify’s Monolith https://shopify.engineering/shopify-monolith 2020-09-16T17:00:00.000Z 2020-09-16T17:00:00.000Z Tophatting in React Native https://shopify.engineering/tophatting-react-native 2020-09-09T14:00:01.000Z 2020-09-09T14:00:01.000Z 5 Ways to Improve Your React Native Styling Workflow https://shopify.engineering/5-ways-to-improve-your-react-native-styling-workflow 2020-09-02T14:00:00.000Z 2020-09-02T14:00:00.000Z How to Track State with Type 2 Dimensional Models https://shopify.engineering/track-state-type-2-dimensional-models 2020-08-27T14:00:00.000Z 2020-08-27T14:00:00.000Z ShipIt! Presents: A Look at Shopify's API Health Report https://shopify.engineering/shipit-presents-shopify-api-health-report 2020-08-25T14:30:00.000Z 2020-08-25T14:30:00.000Z How Shopify Reduced Storefront Response Times with a Rewrite https://shopify.engineering/how-shopify-reduced-storefront-response-times-rewrite 2020-08-20T15:30:00.000Z 2020-08-20T15:30:00.000Z Building Reliable Mobile Applications https://shopify.engineering/making-shopify-point-of-sale-reliable 2020-08-14T15:37:00.000Z 2020-08-14T15:37:00.000Z Using DNS Traffic Management to Add Resiliency to Shopify’s Services https://shopify.engineering/using-dns-traffic-management-add-resiliency-shopify-services 2020-08-05T14:49:00.000Z 2020-08-05T14:49:00.000Z An Introduction to DNS Traffic Management https://shopify.engineering/introduction-dns-traffic-management 2020-08-05T14:48:00.000Z 2020-08-05T14:48:00.000Z Migrating Large TypeScript Codebases To Project References https://shopify.engineering/migrating-large-typescript-codebases-project-references 2020-07-29T16:30:00.000Z 2020-07-29T16:30:00.000Z ShipIt! Presents: AR/VR at Shopify https://shopify.engineering/shipit-presents-ar-vr-shopify 2020-07-24T14:00:00.000Z 2020-07-24T14:00:00.000Z How We’re Solving Data Discovery Challenges at Shopify https://shopify.engineering/solving-data-discovery-challenges-shopify 2020-07-21T18:14:00.000Z 2020-07-21T18:14:00.000Z How We Built Size.link https://shopify.engineering/how-we-built-size-link 2020-07-13T17:00:00.000Z 2020-07-13T17:00:00.000Z Media at Scale: Callbacks vs pipelines https://shopify.engineering/media-at-scale-callbacks-vs-pipelines 2020-07-09T18:36:00.000Z 2020-07-09T18:36:00.000Z A First Look at Reanimated 2 https://shopify.engineering/first-look-reanimated-2 2020-07-02T18:46:00.000Z 2020-07-02T18:46:00.000Z Writing Better, Type-safe Code with Sorbet https://shopify.engineering/writing-better-type-safe-code-with-sorbet 2020-06-24T16:59:00.000Z 2020-06-24T16:59:00.000Z Shopify's Data Science & Engineering Foundations https://shopify.engineering/shopifys-data-science-engineering-foundations 2020-06-18T16:16:00.000Z 2020-06-18T16:16:00.000Z Spark Joy by Running Fewer Tests https://shopify.engineering/spark-joy-by-running-fewer-tests 2020-06-11T18:56:00.000Z 2020-06-11T18:56:00.000Z Understanding Programs Using Graphs https://shopify.engineering/understanding-programs-using-graphs 2020-06-02T17:07:00.000Z 2020-06-02T17:07:00.000Z ShipIt! Presents: How Shopify Uses Nix https://shopify.engineering/shipit-presents-how-shopify-uses-nix 2020-05-29T15:05:00.000Z 2020-05-29T15:05:00.000Z 7 Ways to Make Your SQL Workshop Beginner-friendly https://shopify.engineering/7-ways-make-sql-workshop-beginner-friendly 2020-05-21T18:30:00.000Z 2020-05-21T18:30:00.000Z What Is Nix https://shopify.engineering/what-is-nix 2020-05-19T17:37:00.000Z 2020-05-19T17:37:00.000Z A Brief History of TLS Certificates at Shopify https://shopify.engineering/brief-history-tls-certificates-shopify 2020-05-14T15:46:00.000Z 2020-05-14T15:46:00.000Z Dev Degree: Behind the Scenes https://shopify.engineering/dev-degree-behind-the-scenes 2020-05-13T13:00:00.000Z 2020-05-13T13:00:00.000Z How to Fix Slow Code in Ruby https://shopify.engineering/how-fix-slow-code-ruby 2020-05-08T15:35:00.000Z 2020-05-08T15:35:00.000Z Categorizing Products at Scale https://shopify.engineering/categorizing-products-at-scale 2020-04-30T20:02:00.000Z 2020-04-30T20:02:00.000Z Software Release Culture at Shopify https://shopify.engineering/software-release-culture-shopify 2020-04-15T14:00:00.000Z 2020-04-15T14:00:00.000Z Building Arrive's Confetti in React Native with Reanimated https://shopify.engineering/building-arrives-confetti-in-react-native-with-reanimated 2020-04-07T15:30:00.000Z 2020-04-07T15:30:00.000Z Optimizing Ruby Lazy Initialization in TruffleRuby with Deoptimization https://shopify.engineering/optimizing-ruby-lazy-initialization-in-truffleruby-with-deoptimization 2020-03-31T14:30:00.000Z 2020-03-31T14:30:00.000Z Refactoring Legacy Code with the Strangler Fig Pattern https://shopify.engineering/refactoring-legacy-code-strangler-fig-pattern 2020-03-11T19:00:00.000Z 2020-03-11T19:00:00.000Z The Evolution of Kit: Automating Marketing Using Machine Learning https://shopify.engineering/evolution-kit-automating-marketing-machine-learning 2020-03-04T14:30:00.000Z 2020-03-04T14:30:00.000Z Creating Native Components That Accept React Native Subviews https://shopify.engineering/creating-native-components-accept-react-native-subviews 2020-02-25T15:30:00.000Z 2020-02-25T15:30:00.000Z Your Circuit Breaker is Misconfigured https://shopify.engineering/circuit-breaker-misconfigured 2020-02-18T20:28:00.000Z 2020-02-18T20:28:00.000Z Great Code Reviews—The Superpower Your Team Needs https://shopify.engineering/great-code-reviews 2020-02-10T15:00:00.000Z 2020-02-10T15:00:00.000Z Bug Bounty Year in Review 2019 https://shopify.engineering/bug-bounty-year-review-2019 2020-02-06T16:00:00.000Z 2020-02-06T16:00:00.000Z React Native is the Future of Mobile at Shopify https://shopify.engineering/react-native-future-mobile-shopify 2020-01-29T15:21:00.000Z 2020-01-29T15:21:00.000Z Scaling Mobile Development by Treating Apps as Services https://shopify.engineering/scaling-mobile-development-by-treating-apps-as-services 2020-01-16T19:30:00.000Z 2020-01-16T19:30:00.000Z How to Implement a Secure Central Authentication Service in Six Steps https://shopify.engineering/implement-secure-central-authentication-service-six-steps 2019-12-26T15:30:00.000Z 2019-12-26T15:30:00.000Z How Shopify Manages API Versioning and Breaking Changes https://shopify.engineering/shopify-manages-api-versioning-breaking-changes 2019-12-17T18:30:00.000Z 2019-12-17T18:30:00.000Z Successfully Merging the Work of 1000+ Developers https://shopify.engineering/successfully-merging-work-1000-developers 2019-11-14T18:30:00.000Z 2019-11-14T18:30:00.000Z Four Steps to Creating Effective Game Day Tests https://shopify.engineering/four-steps-creating-effective-game-day-tests 2019-11-12T16:30:00.000Z 2019-11-12T16:30:00.000Z Sam Saffron AMA: Performance and Monitoring with Ruby https://shopify.engineering/sam-saffron-performance-monitoring-ama 2019-11-05T15:30:00.000Z 2019-11-05T15:30:00.000Z Make Great Decisions Quickly with TOMASP https://shopify.engineering/make-great-decisions-quickly-with-tomasp 2019-10-22T19:47:00.000Z 2019-10-22T19:47:00.000Z Five Common Data Stores and When to Use Them https://shopify.engineering/five-common-data-stores-usage 2019-10-15T19:15:00.000Z 2019-10-15T19:15:00.000Z How to Write Fast Code in Ruby on Rails https://shopify.engineering/write-fast-code-ruby-rails 2019-10-08T15:00:00.000Z 2019-10-08T15:00:00.000Z How Shopify Manages Petabyte Scale MySQL Backup and Restore https://shopify.engineering/shopify-manages-petabyte-scale-mysql-backup-restore 2019-10-01T14:30:00.000Z 2019-10-01T14:30:00.000Z How Shopify Scales Up Its Development Teams https://shopify.engineering/how-shopify-scales-up-its-development-teams 2019-09-26T18:30:00.000Z 2019-09-26T18:30:00.000Z Want to Improve UI Performance? Start by Understanding Your User https://shopify.engineering/improve-ui-performance-understanding-your-user 2019-09-20T17:30:00.000Z 2019-09-20T17:30:00.000Z Building Resilient GraphQL APIs Using Idempotency https://shopify.engineering/building-resilient-graphql-apis-using-idempotency 2019-08-27T19:00:00.000Z 2019-08-27T19:00:00.000Z Living on the Edge of Rails https://shopify.engineering/living-on-the-edge-of-rails 2019-08-21T18:39:00.000Z 2019-08-21T18:39:00.000Z Pagination with Relative Cursors https://shopify.engineering/pagination-relative-cursors 2019-08-12T17:30:00.000Z 2019-08-12T17:30:00.000Z Lessons from Leading a Remote Engineering Team https://shopify.engineering/lessons-leading-remote-engineering-team 2019-07-25T18:00:00.000Z 2019-07-25T18:00:00.000Z Componentizing Shopify’s Tax Engine https://shopify.engineering/componentizing-shopify-tax-engine 2019-07-05T17:59:00.000Z 2019-07-05T17:59:00.000Z Implementing Android POS Receipt Printing on Shopify https://shopify.engineering/implementing-android-pos-receipt-printing 2019-06-05T18:47:00.000Z 2019-06-05T18:47:00.000Z Mobile Release Engineering at Scale with Shipit Mobile https://shopify.engineering/mobile-release-engineering-scale-shipit-mobile 2019-05-17T17:08:00.000Z 2019-05-17T17:08:00.000Z Pair Programming Explained https://shopify.engineering/pair-programming-explained 2019-05-09T17:59:00.000Z 2019-05-09T17:59:00.000Z Pair Programming is when two people write, debug, or explore code together. It’s simple, but getting the most out of your pairing session can take some work. A New Kubectl Plugin for Kubernetes Ingress Controller ingress-nginx https://shopify.engineering/kubectl-plugin-kubernetes-ingress-controller-ingress-nginx 2019-05-01T17:44:00.000Z 2019-05-01T17:44:00.000Z Building Shopify’s Application Security Program https://shopify.engineering/building-shopify-application-security-program 2019-04-26T14:59:00.000Z 2019-04-26T14:59:00.000Z One Million Dollars in Bug Bounties https://shopify.engineering/one-million-dollars-in-bug-bounties 2019-04-03T13:15:00.000Z 2019-04-03T13:15:00.000Z Developer Kirsten Westeinde talks Developing a Growth Mindset, the Early Days of Shopify, and Working with Go https://shopify.engineering/developer-kirsten-westeinde-talks-developing-a-growth-mindset-the-early-days-of-shopify-and-working-with-go 2019-03-22T16:56:00.000Z 2019-03-22T16:56:00.000Z Meet Kirsten Westeinde, she’s a Development Manager based in San Francisco, California. She’s been working at Shopify for just over five years now and has seen the ebbs and flows of the company as it’s continued to scale dramatically over the years. Shopify Developers Share Lessons on Self-Advocacy and Dealing with Adversity in the Technology Industry https://shopify.engineering/shopify-developers-share-lessons-self-advocacy-adversity-technology 2019-03-08T16:39:00.000Z 2019-03-08T16:39:00.000Z Deconstructing the Monolith: Designing Software that Maximizes Developer Productivity https://shopify.engineering/deconstructing-monolith-designing-software-maximizes-developer-productivity 2019-02-21T20:00:00.000Z 2019-02-21T20:00:00.000Z Unifying Our GraphQL Design Patterns and Best Practices with Tutorials https://shopify.engineering/unifying-graphql-design-patterns-best-practices-tutorials 2019-02-13T16:36:00.000Z 2019-02-13T16:36:00.000Z Read Time: 5 minutes In 2015, Shopify began a journey to put mobile first. The biggest undertaking was rebuilding our native Shopify Mobile app and improving the tools and technology to accomplish this. We experimented with GraphQL to build the next generation of APIs that power our mobile apps and give our 600,000+ merchants the same seamless experience when using Shopify. There are currently hundreds Shopify developers across teams and offices contributing to our GraphQL APIs including our two public APIs: Admin and Storefront. Engineering a Historic Moment: Shopify Gets Ready for Cannabis in Canada https://shopify.engineering/engineering-a-historic-moment-shopify-gets-ready-for-cannabis-in-canada 2019-02-07T16:30:00.000Z 2019-02-07T16:30:00.000Z Attracting Local Talent And Building Mobile Apps: A Developer Hiring Initiative https://shopify.engineering/attracting-local-talent-and-building-mobile-apps-a-developer-hiring-initiative 2019-02-01T17:35:00.000Z 2019-02-01T17:35:00.000Z Shopify is a commerce platform that serves over 600,000+ merchants and employs over 3000 people across the globe. We’re always on the lookout for highly skilled individuals with diverse backgrounds to join our team, and that requires us to connect with them outside traditional recruitment channels. That’s why last year we ran the “Build Things, Show Shopify” initiative inviting developers outside of Shopify to build an app and showcase their finished product to a multidisciplinary panel of Shopify employees as well as in front of hiring managers and VCs. The outcome? Not only did we build a local developer community in Ottawa, but we added a number of potential hires to our recruiting pipeline. How Shopify Uses Recommender Systems to Empower Entrepreneurs https://shopify.engineering/how-shopify-uses-recommender-systems-to-empower-entrepreneurs 2019-01-25T17:44:00.000Z 2019-01-25T17:44:00.000Z iOS Application Testing Strategies at Shopify https://shopify.engineering/ios-application-testing-strategies-at-shopify 2019-01-15T20:46:00.000Z 2019-01-15T20:46:00.000Z The Unreasonable Effectiveness of Test Retries: An Android Monorepo Case Study https://shopify.engineering/unreasonable-effectiveness-test-retries-android-monorepo-case-study 2019-01-08T19:00:00.000Z 2019-01-08T19:00:00.000Z Preparing Shopify for Black Friday and Cyber Monday https://shopify.engineering/preparing-shopify-for-black-friday-cyber-monday 2018-12-21T19:00:00.000Z 2018-12-21T19:00:00.000Z Bug Bounty Year in Review 2018 https://shopify.engineering/shopify-bug-bounty-year-in-review-2018 2018-12-20T18:27:00.000Z 2018-12-20T18:27:00.000Z How an Intern Released 3 Terabytes Worth of Storage Before BFCM https://shopify.engineering/how-an-intern-released-3-terabytes-worth-of-storage-before-bfcm 2018-12-14T18:22:00.000Z 2018-12-14T18:22:00.000Z Director of Engineering, Lawrence Mandel Talks Road to Leadership, Growth, and Finding Balance. https://shopify.engineering/director-of-engineering-lawrence-mandel-talks-road-to-leadership-growth-and-finding-balance 2018-12-03T21:12:00.000Z 2018-12-03T21:12:00.000Z Lawrence Mandel is a Director of Production Engineering leading Shopify’s Developer Acceleration team and has been at Shopify for over a year. He previously worked at IBM and Mozilla where he started as a software developer before transitioning into leadership roles. Through all his work experience, he’s learned to understand the meaning of time management and to prioritize the most important things in his life, which are his family, health, and work. Developer Talks: How the Command Line Can Empower You (Webinar) https://shopify.engineering/developer-talks-how-the-command-line-can-empower-you 2018-11-20T20:00:00.000Z 2018-11-20T20:00:00.000Z Handling Addresses from All Around the World https://shopify.engineering/handling-addresses-from-all-around-the-world 2018-11-14T15:12:00.000Z 2018-11-14T15:12:00.000Z Running Apache Kafka on Kubernetes at Shopify https://shopify.engineering/running-apache-kafka-on-kubernetes-at-shopify 2018-11-07T18:38:00.000Z 2018-11-07T18:38:00.000Z Building Shopify POS for Android Using MVVM https://shopify.engineering/building-shopify-pos-android-using-mvvm 2018-10-31T17:30:00.000Z 2018-10-31T17:30:00.000Z Creating Locale-aware Number and Currency Condensing https://shopify.engineering/creating-locale-aware-number-and-currency-condensing 2018-10-24T17:43:00.000Z 2018-10-24T17:43:00.000Z Building a Data Table Component in React https://shopify.engineering/building-data-table-component-react 2018-10-17T17:30:00.000Z 2018-10-17T17:30:00.000Z Lost in Translations: Bringing the World to Shopify https://shopify.engineering/lost-in-translations 2018-10-10T14:30:00.000Z 2018-10-10T14:30:00.000Z Mohammed Ridwanul Islam: How Mentorship, the T Model and a Pen Are the Keys to His Success https://shopify.engineering/mohammed-ridwanul-islam-how-mentorship-the-t-model-and-a-pen-are-the-keys-to-his-success 2018-10-03T18:55:00.000Z 2018-10-03T18:55:00.000Z Dev Degree - A Big Bet on Software Education https://shopify.engineering/dev-degree-a-big-bet-on-software-education 2018-09-24T13:00:00.000Z 2018-09-24T13:00:00.000Z Introducing the Deprecation Toolkit https://shopify.engineering/introducing-the-deprecation-toolkit 2018-09-19T16:15:00.000Z 2018-09-19T16:15:00.000Z Mobile Tophatting at Shopify https://shopify.engineering/mobile-tophatting-at-shopify-1 2018-09-11T18:00:00.000Z 2018-09-11T18:00:00.000Z Shaping the Future of Payments in the Browser https://shopify.engineering/shaping-the-future-of-payments-in-the-browser 2018-09-04T19:32:00.000Z 2018-09-04T19:32:00.000Z Iterating Towards a More Scalable Ingress https://shopify.engineering/iterating-towards-more-stable-ingress 2018-08-31T18:00:00.000Z 2018-08-31T18:00:00.000Z E-Commerce at Scale: Inside Shopify's Tech Stack - Stackshare.io https://shopify.engineering/e-commerce-at-scale-inside-shopifys-tech-stack 2018-08-08T15:30:00.000Z 2018-08-08T15:30:00.000Z 9 minute read Before 2015, we had an Operations and Performance team. Around this time, we decided to create the Production Engineering department and merge the teams. The department is responsible for building and maintaining common infrastructure that allows the rest of product development teams to run their code. Both Production Engineering and all the product development teams share responsibility for the ongoing operation of our end user applications. This means all technical roles share monitoring and incident response, with escalation happening laterally to bring in any skill set required to restore service in case of problems. Behind The Code: Jennice Colaco, Backend Developer https://shopify.engineering/behind-the-code-jennice-collaco-backend-developer 2018-07-26T19:12:00.000Z 2018-07-26T19:12:00.000Z Behind the Code is an initiative with the purpose of sharing the various career stories of our engineers at Shopify, to show that the path to development is non-linear and quite interesting. The features will showcase people just starting their careers, those who made career switches, and those who've been in the industry for many years. Enjoy! Scaling iOS CI with Anka https://shopify.engineering/scaling-ios-ci-with-anka 2018-07-11T17:30:00.000Z 2018-07-11T17:30:00.000Z Introducing the Merge Queue https://shopify.engineering/introducing-the-merge-queue 2018-06-08T15:00:00.000Z 2018-06-08T15:00:00.000Z Shopify Interns Share Their Tips for Success https://shopify.engineering/shopify-interns-share-their-tips-for-success 2018-05-03T15:40:00.000Z 2018-05-03T15:40:00.000Z Solving the N+1 Problem for GraphQL through Batching https://shopify.engineering/solving-the-n-1-problem-for-graphql-through-batching 2018-04-24T18:20:00.000Z 2018-04-24T18:20:00.000Z Shopify’s Infrastructure Collaboration with Google https://shopify.engineering/shopify-infrastructure-collaboration-with-google 2018-03-26T12:00:00.000Z 2018-03-26T12:00:00.000Z A Pods Architecture To Allow Shopify To Scale https://shopify.engineering/a-pods-architecture-to-allow-shopify-to-scale 2018-03-02T19:30:00.000Z 2018-03-02T19:30:00.000Z In 2015, it was no longer possible to continue buying a larger database server for Shopify. We finally had no choice but to shard the database, which allowed us to horizontally scale our databases and continue our growth. However, what we gained in performance and scalability we lost in resilience. Throughout the Shopify codebase was code like this: Sharding.with_each_shard do some_action end If any of our shards went down, that entire action would be unavailable across the platform. We realized this would become a major problem as the number of shards continued to increase. In 2016 we sat down to reorganize Shopify’s runtime architecture. Accelerating Android Talent Through Community Bootcamps https://shopify.engineering/accelerating-android-talent-through-community-bootcamps 2018-02-27T22:00:00.000Z 2018-02-27T22:00:00.000Z 6 minute read The mobile team knew they needed developers, particularly Android developers. A few years ago, Shopify pivoted to mobile-first, which led to the launches of Shopify Mobile, Shopify Pay, Frenzy, and others. To maintain momentum, Shopify had to keep building up its mobile talent. Back when Shopify's mobile teams spun up, many of our then-early mobile developers never did any mobile development before, instead teaching themselves how to do it on the job. From this observation, we had an insight: what if we could teach developers how to build an Android app, via a Shopify-hosted workshop? The benefits were obvious: this educational initiative could help our local developer community pick up some new skills, while potentially allowing us to meet exciting new talent. The idea for Android Bootcamp was born. Future Proofing Our Cloud Storage Usage https://shopify.engineering/future-proofing-our-cloud-storage-usage 2018-02-26T18:30:00.000Z 2018-02-26T18:30:00.000Z How we reduced error rates, and dropped latencies across merchants’ flows Reading Time: 6 Minutes Shopify merchants trust that when they build their stores on our platform, we’ve got their back. They can focus on their business, while we handle everything else. Any failures or degradations that happen put our promise of a sturdy, battle-tested platform at risk. To do so, we need to ensure that the platform stays up and stays reliable. Shopify since 2016 has grown from 375,000 merchants to over 600,000. As of today, an average of 450,000 S3 operations per second are being made through our platform. However, that rapid growth also came with an increased S3 error rate, and increased read and write latencies. While we use S3 at Shopify, if your application uses any flavor of cloud storage, and its use of cloud storage strongly correlates with the growth of your user base—whether it’s storing user or event data—I’m hoping this post provides some insight into how to optimize your cloud storage! 2017 Bug Bounty Year in Review https://shopify.engineering/bug-bounty-year-in-review 2018-02-22T16:00:00.000Z 2018-02-22T16:00:00.000Z 7 minute read At Shopify, our bounty program complements our security strategy and allows us to leverage a community of thousands of researchers who help secure our platform and create a better Shopify user experience. We first launched the program in 2013 and moved to the HackerOne platform in 2015 to increase hacker awareness. Since then, we've continued to see increasing value in the reports submitted, and 2017 was no exception. Implementing ChatOps into our Incident Management Procedure https://shopify.engineering/implementing-chatops-into-our-incident-management-procedure 2018-02-13T18:00:00.000Z 2018-02-13T18:00:00.000Z 8 minute read Production engineers (PE) are expected to be incident management experts. Still, incident handling is difficult, often messy, and exhausting. We encounter new incidents, search high and low for possible explanations, sometimes tunnel on symptoms, and, under pressure, forget some best practices. At Shopify, we care not only about handling incidents quickly and efficiently, but also PE well-being. We have a special IMOC (incident manager on call) rotation and an incident chatbot to assist IMOCs. This post provides an overview of incident management at Shopify, the responsibility of different roles during an incident, and how our chatbot works to support our team. How Shopify Merchants can Measure Retention https://shopify.engineering/how-shopify-merchants-can-measure-retention 2017-11-14T19:36:00.000Z 2017-11-14T19:36:00.000Z How We Enable Our Interns to Make an Impact https://shopify.engineering/intern-blog-post 2017-11-01T20:55:00.000Z 2017-11-01T20:55:00.000Z Making an Impact When interns join Shopify for their internship term, they work on projects that will impact our merchants, partners, and even their fellow developers. Some of these projects will alleviate a merchant's pain points, like the ability to sell their products on different channels, or simplify a complicated process for our developers. We want interns to leave knowing they worked on real projects with real impact. Tell Your Stories: The Benefits of Strategic Engineering Communications https://shopify.engineering/tell-your-stories-the-benefits-of-strategic-engineering-communications 2017-10-25T19:30:00.000Z 2017-10-25T19:30:00.000Z In early 2016, we faced a problem at Shopify. We were growing quickly, and decisions could no longer be made across the room, so to speak. Four offices became five, accommodating that growth raised interesting questions like: how would new people know the history of the company, and how could existing Shopifolk keep up with new developments? In addition to sharing knowledge inside the company, we also wanted to let people outside Shopify know what we were working on to give back to the community and to support recruitment efforts. Engineering communications was born to solve a specific problem. A valued saying here is “do things, tell people,” but, while we’re very good at the first part, we weren’t living up to expectations on the second. Ad hoc worked when we were smaller, but with technical stories now coming from teams as varied as production engineering, mobile, front-end development, and data engineering, we needed something more formalized. Strong communications inside the engineering team could help prevent the overlap of work by different teams or the duplication of mistakes, and it could support cross-pollination of ideas. How Shopify Governs Containers at Scale with Grafeas and Kritis https://shopify.engineering/how-shopify-governs-containers-at-scale-with-grafeas-and-kritis 2017-10-12T15:02:00.000Z 2017-10-12T15:02:00.000Z Building Shopify Mobile with Native and Web Technology https://shopify.engineering/building-shopify-mobile-with-native-and-web-technology 2017-09-29T16:30:00.000Z 2017-09-29T16:30:00.000Z Code Style Consistency for Shopify’s Decade-Old Codebase https://shopify.engineering/code-style-consistency-for-shopify-s-decade-old-codebase 2017-09-22T16:34:00.000Z 2017-09-22T16:34:00.000Z 5 minute read Over the course of Shopify's 13-year codebase history, the core platform has never been rewritten. That meant a slew of outdated code styles, piling atop of one another and without a lot of consistency. By 2012, our CEO Tobi created a draft Ruby style guide to keep up with the growth. Unfortunately, it never became embedded in our programming culture and many people didn't even know it existed. Integrating with Amazon: How We Bridged Two Different Commerce Domain Models https://shopify.engineering/integrating-with-amazon-how-we-bridged-two-different-commerce-domain-models 2017-08-29T17:05:00.000Z 2017-08-29T17:05:00.000Z How We Support Intern Growth through Challenge and Practice https://shopify.engineering/the-developer-intern-experience 2017-08-25T21:48:00.000Z 2017-08-25T21:48:00.000Z 4 minute read An essential part of working as a developer is getting practical experience in the real world, of which internships can play a meaningful part. The Shopify internship program, which started back in 2011, runs for four months during the summer, fall, and winter terms. Interns can work from one of our offices in Waterloo, Toronto, Ottawa, and Montreal. How We Optimized Product Syncing for Facebook https://shopify.engineering/how-we-optimized-product-syncing-for-facebook 2017-08-14T16:00:00.000Z 2017-08-14T16:00:00.000Z 4 minute read Merchants can sell their products on Shopify in many ways. In addition to their own website, merchants can integrate with some of the biggest social media channels on the internet. Over 140,000 merchants participate in our Facebook channel, where they can display and sell their products on Facebook. How Shopify Capital Uses Quantile Regression To Help Merchants Succeed https://shopify.engineering/how-shopify-uses-machine-learning-to-help-our-merchants-grow-their-business 2017-07-11T15:24:00.000Z 2017-07-11T15:24:00.000Z 6 minute read Shopify Capital provides funding to help merchants on Shopify grow their businesses. But how does Shopify Capital award these merchant cash advances? In this post, I'll dive deep into the machine-learning technique our Risk-Algorithms team uses to decide eligibility for cash advances. The exact features that go into the predictive model that powers Shopify Capital are secret, but I can share the key technique we use: quantile regression. Upgrading Shopify to Rails 5 https://shopify.engineering/upgrading-shopify-to-rails-5-0 2017-06-20T17:30:00.000Z 2017-06-20T17:30:00.000Z Today, Shopify runs on Rails 5.0, the latest version. It’s important to us to stay on the latest version so we can improve the performance and stability of the application without having to increase the maintenance cost of applying monkey patches. This guarantees we would always be in the version maintained by the community; and, that we would have access to new features soon. Upgrading the Shopify monolith—one of the oldest and the largest Rails applications in the industry—from Rails 4.2 to 5.0 took us nearly a year. In this post, I’ll share our upgrade story and the lessons we learned. If you're wondering how the Shopify scale looks like or you plan a major Rails upgrade, this post is for you. Maintaining a Swift and Objective-C Hybrid Codebase https://shopify.engineering/maintaining-a-swift-and-objective-c-hybrid-codebase 2017-06-15T18:13:00.000Z 2017-06-15T18:13:00.000Z 6 minute read Swift is gaining popularity among iOS developers, which is of no surprise. It's strictly typed, which means you can prove the correctness of your program at compile time, given that your typesystem describes the domain well. It's a modern language offering syntax constructs encouraging developers to write better architecture using fewer lines of code, making it expressive. It's more fun to work with, and all the new Cocoa projects are being written in Swift. At Shopify, we want to adopt Swift where it makes sense, while understanding that many existing projects have an extensive codebase (some of them written years ago) in Objective-C (OBJC) that are still actively supported. It's tempting to write new code in Swift, but we can't migrate all the existing OBJC codebase quickly. And sometimes it just isn't worth the effort. How 17 Lines of Code Improved Shopify.com Loading by 50% https://shopify.engineering/how-17-lines-of-code-improved-shopify-com-loading-by-50 2017-05-24T20:36:00.000Z 2017-05-24T20:36:00.000Z 3 minute read Big improvements don't have to be hard nor take a long time to implement. It took, for example, only 17 lines of code to decrease the time to display text on Shopify.com by 50%. That saved visitors 1.2 seconds: each second matters given that 40% of users expect a website to load within two seconds and those same users will abandon a site if it takes longer than three. Bootsnap: Optimizing Ruby App Boot Time https://shopify.engineering/bootsnap-optimizing-ruby-app-boot-time 2017-05-18T18:30:00.000Z 2017-05-18T18:30:00.000Z 8 minute read Hundreds of Shopify developers work on our largest codebase, the monolithic Rails application that powers most of our product offering. There are various benefits to having a “majestic monolith,” but also a few downsides. Chief among them is the amount of time people spend waiting for Rails to boot. Doing development, two of the most common tasks are running a development server and running a unit test file. By improving the performance of these tasks, we will also improve the experience for developers working on this codebase and achieve higher iteration speed. We started measuring and profiling the following code paths: Development server: time to first request Unit testing: time to first unit test Building a Dynamic Mobile CI System https://shopify.engineering/building-a-dynamic-mobile-ci-system 2017-04-13T18:00:00.000Z 2017-04-13T18:00:00.000Z 18 minute read The mobile space has changed quickly, even within the past few years. At Shopify, the world’s largest Rails application, we have seen the growth and potential of the mobile market and set a goal of becoming a mobile-first company. Today, over 130,000 merchants are using Shopify Mobile to set up and run their stores from their smartphones. Through the inherent simplicity and flexibility of the mobile platform, many mobile-focused products have found success. This post was co-written with Arham Ahmed, and shout-outs to Sean Corcoran of MacStadium and Tim Lucas of Buildkite. The Side Hustle: Building a Quadcopter Controller for iOS https://shopify.engineering/the-side-hustle-building-a-quadcopter-controller-for-ios 2017-03-23T17:00:00.000Z 2017-03-23T17:00:00.000Z Our engineering blog is home to our stories sharing technical knowledge and lessons learned. But that's only part of the story: we hire passionate people who love what they do and are invested in mastering their craft. Today we launch "The Side Hustle," an occasional series highlighting some side projects from our devs while off the Shopify clock. When Gabriel O'Flaherty-Chan noticed quadcopter controllers on mobile mostly translated analog controls to digital, he took it upon himself to find a better design. 7 minute read For under $50, you can get ahold of a loud little flying piece of plastic from Amazon, and they’re a lot of fun. Some of them even come with cameras and Wi-Fi for control via a mobile app. Unfortunately, these apps are pretty low quality — they’re unreliable and frustrating to use, and look out of place in 2017. The more I used these apps, the more frustrated I got, so I started thinking about ways I could provide a better solution, and two months later I emerged with two things: 1. An iOS app for flying quadcopters called SCARAB, and 2. An open-source project for building RC apps called QuadKit Sharing the Philosophy Behind Shopify's Bug Bounty https://shopify.engineering/sharing-the-philosophy-behind-shopifys-bug-bounty 2017-02-16T14:26:00.000Z 2017-02-16T14:26:00.000Z 2 minute read Bug bounties have become commonplace as companies realize the advantages to distributing the hunt for flaws and vulnerabilities among talented people around the world. We're no different, launching a security response program in 2012 before evolving it into a bug bounty with HackerOne in 2015. Since then, we've seen meaningful results including nearly 400 fixes from 250 researchers, to the tune of bounties totalling over half a million dollars. Security is vital for us. With the number of shops and volume of info on our platform, it's about maintaining trust with our merchants. Entrepreneurs are running their businesses and they don't want to worry about security, so anything we can do to protect them is how we measure our success. As Tobi recently mentioned on Hacker News, “We host the livelihoods of hundreds of thousands of other businesses. If we are down or compromised all of them can't make money.” So, we have to ensure any issue gets addressed. Surviving Flashes of High-Write Traffic Using Scriptable Load Balancers (Part II) https://shopify.engineering/surviving-flashes-of-high-write-traffic-using-scriptable-load-balancers-part-ii 2017-02-05T19:30:00.000Z 2017-02-05T19:30:00.000Z 7 minute read In the first post of this series, I outlined Shopify’s history with flash sales, our move to Nginx and Lua to help manage traffic, and the initial attempt we made to throttle traffic that didn’t account sufficiently for customer experience. We had underestimated the impact of not giving preference to customers who’d entered the queue at the beginning of the sale, and now we needed to find another way to protect the platform without ruining the customer experience. Surviving Flashes of High-Write Traffic Using Scriptable Load Balancers (Part I) https://shopify.engineering/surviving-flashes-of-high-write-traffic-using-scriptable-load-balancers-part-i 2017-02-03T01:30:00.000Z 2017-02-03T01:30:00.000Z 7 minute read This Sunday, over 100 million viewers will watch the Super Bowl. Whether they’re catching the match-up between the Falcons and the Patriots, or there for the commercials between the action, that’s a lot of eyeballs—and that’s only counting America. But all that attention doesn’t just stay on the screen, it gets directed to the web, and if you’re not prepared curious visitors could be rewarded with a sad error page. The Super Bowl makes us misty-eyed because our first big flash sale happened in 2007, after the Colts beat the Bears. Fans rushed online for T-shirts celebrating the win, giving us a taste of what can happen when a flood of people convene on one site in a very short duration of time. Since then, we’ve been continually levelling up our ability to handle flash sales, and our merchants have put us to the test: on any given day, they’ll hurl Super Bowl-sized traffic, often without notice. Why Shopify Moved to The Production Engineering Model https://shopify.engineering/why-shopify-moved-to-the-production-engineering-model 2016-10-30T08:14:00.000Z 2016-10-30T08:14:00.000Z 6 minute read The traditional model of running large-scale computer systems divides work into Development and Operations as distinct and separate teams. This split works reasonably well for computer systems that are changed or updated very rarely, and organizations sometimes require this if they’re deploying and operating software built by a different company or organization. However, this rigid divide fails for large-scale web applications that are undergoing frequent or even continuous change. DevOps is the term for a movement that’s gathered steam in the past decade to bring together these disciplines. Automatic Deployment at Shopify https://shopify.engineering/automatic-deployment-at-shopify 2016-10-19T17:00:00.000Z 2016-10-19T17:00:00.000Z 6 minute read Hi, I'm Graeme Johnson, and I work on Shopify's Developer Acceleration team. Our mission is to provide tools that let developers ship fast and safely. Recently we began shipping Shopify automatically as developers hit the merge button in GitHub. This removes the final manual step in our deploy pipeline, which now looks like this: Merge → Build container → Run CI → Hit deploy button → Ship to production We have invested a lot of engineering effort to make this pipeline fast enough to run end-to-end in about 15 minutes—still too slow for our taste—and robust enough to allow cancellation at any stage in the process. Automating the actual deploy trigger was the next logical step. How We're Thinking About Commerce and VR With Our First VR App, Thread Studio https://shopify.engineering/how-were-thinking-about-commerce-and-vr-with-our-first-vr-app-thread-studio 2016-09-29T17:00:00.000Z 2016-09-29T17:00:00.000Z 3 minute read Hey everyone! I’m Daniel and I lead our VR efforts at Shopify. When I talk to people about VR and commerce, the first idea that usually pops into their heads is about all the possibilities of walking around a virtual shopping mall. While that could be an enjoyable experience for some, I find it’s a very limiting view of how virtual reality can actually improve retail. If VR gave you the superpowers to do anything, create anything, and go anywhere you want, would you really want to go shopping in a regular mall?More than a virtual mall It’s easy to take a new medium and try to shoehorn in what already exists and is familiar. What’s hard is figuring out what content makes the medium truly shine and worthwhile to use. VR offers an amazing storytelling platform for brands. For the first time, brands can put people in the stories that their products tell. If you’re selling scuba gear, why not show what it’d look like underwater with jellyfish passing by? Or a tent on a windy, chilly cliff, reflecting the light of a scrappy fire? It sure would beat being in a fluorescent-lit camping store. In VR, you could explore inside a tent before you buy it, or change the environment around you at a press of a button. Shopify Merchants Will Soon Get AMP'd https://shopify.engineering/shopify-merchants-will-soon-get-ampd 2016-09-20T19:00:00.000Z 2016-09-20T19:00:00.000Z 1 minute read Today we're excited to share our involvement with the AMP Project. Life happens on mobile. (In fact, there are over seven billion small screens now!) We're not only comfortable with shopping online, but increasingly we're buying things using our mobile devices. Delays can mean the difference between a sale or no sale, so it's important to make things run as quickly as possible. AMP, or Accelerated Mobile Pages, is an open source, Google-led initiative aimed at improving the mobile web experience and solving the issue of slow loading content. (You can learn more about the tech here.) Starting today, Google is pointing to AMP’d content beyond their top stories carousel to include general web search results. How Our UX Team's Approaching Accessibility https://shopify.engineering/how-our-ux-teams-approaching-accessibility 2016-09-09T14:00:00.000Z 2016-09-09T14:00:00.000Z Last updated: September 9, 2016 2 minute read At Shopify, our mission is to make commerce better for everyone. When we say better, we’re talking about caring deeply about making quality products. To us, a quality web product means a few things: certainly beautiful design, engaging copy, and a fantastic user experience, but just as important are inclusivity and the principles of universal design. “Everyone” is a pretty big group. It includes our merchants, their customers, our developer partners, our employees, and the greater tech community at large, where we love to lead by example. “Everyone” also includes: 9.1% of adults with vision trouble, and 8% of men and 0.5% of women who are colorblind 16.8% of adults with hearing trouble 15.1% of adults with physical functioning difficulty 4.4% of adults with cognitive disabilities [PDF] We take our mission to heart, so it’s important that Shopify products are useable and useful to all our users. This is something we’ve been thinking about and working on for a few years, but it’s an ongoing, difficult challenge. Luckily, we love tackling challenging problems and we’re constantly chipping away at this one. We’ve learned a lot from the community and think it’s important to contribute back, so — in celebration of Global Accessibility Awareness Day — we’re thrilled to announce a series of posts on accessibility. How to Set Up Your Own Mobile CI System https://shopify.engineering/how-to-set-up-your-own-mobile-ci-system 2016-06-15T18:46:00.000Z 2016-06-15T18:46:00.000Z 1 minute read Editor's note: a more updated post on this topic is now up! Check out Sander Lijbrink's "Building a Dynamic Mobile CI System." Over the past few years the mobile development community has seen a dramatic shift towards the use of continuous integration (CI) systems similar to changes present in other communities — particularly web developers. This shift has been a particularly powerful moment for mobile developers, as they’re able to focus on their apps and code rather than spending their time on provisioning, code signing, deployment, and running tests. I’m a software developer at Shopify currently working on our Developer Acceleration’s Mobile team. My job is to design, create, and manage an automated system to provide an accelerated development experience for our developers. Based on our experiences at Shopify, we will be talking about “hosted” vs “BYOH” systems, how to provision Mac OS X and Ubuntu machines for iOS and Android, and the caveats we ran into throughout this series. By the end, you should be ready to go build your very own CI setup. Adventures in Production Rails Debugging https://shopify.engineering/adventures-in-production-rails-debugging 2016-03-08T15:43:00.000Z 2016-03-08T15:43:00.000Z 5 minute read At Shopify we frequently need to debug production Rails problems. Adding extra debugging code takes time to write and deploy, so we’ve learned how to use tools like gdb and rbtrace to quickly track down these issues. In this post, we’ll explain how to use gdb to retrieve a Ruby call stack, inspect environment variables, and debug a really odd warning message in production. We recently ran into an issue where we were seeing a large number of similar warning messages spamming our log files: /artifacts/ruby/2.1.0/gems/rack-1.6.4/lib/rack/utils.rb:92: warning: regexp match /.../n against to UTF-8 string This means we are trying to match an ASCII regular expression on a UTF-8 source string. Developer Onboarding at Shopify https://shopify.engineering/developer-onboarding-at-shopify 2015-09-23T14:00:00.000Z 2015-09-23T14:00:00.000Z 5 minute read Hi there! We’re Kat and Omosola and we’re software developers at Shopify. We both started working at Shopify back in May, and we felt both excited and a little nervous before we got here. You never know exactly what to expect when you start at a new company and no matter what your previous experience is, there are always a lot of new skills you need to learn. Thankfully, Shopify has an awesome onboarding experience for its new developers, which is what we want to talk about today. Introducing Shipit https://shopify.engineering/introducing-shipit 2015-06-17T15:41:00.000Z 2015-06-17T15:41:00.000Z 3 minute read After a year of internal use, we’re excited to open-source our deployment tool, Shipit. With dozens of teams pushing code multiple times a day to a variety of different targets, fast and easy deploys are key to developer productivity (and happiness) at Shopify. Along with key improvements to our infrastructure, Shipit plays a central role in making this happen. Secrets at Shopify - Introducing EJSON https://shopify.engineering/secrets-at-shopify-introducing-ejson 2015-05-26T13:52:00.000Z 2015-05-26T13:52:00.000Z This is a continuation of our series describing our evolution of Shopify toward a Docker-powered, containerized data centre. Read the last post in the series here. One of the challenges along the road to containerization has been establishing a way to move application secrets like API keys, database passwords, and so on into the application in a secure way. This post explains our solution, and how you can use it with your own projects. Announcing go-lua https://shopify.engineering/announcing-go-lua 2015-03-04T18:45:00.000Z 2015-03-04T18:45:00.000Z Today, we’re excited to release go-lua as an Open Source project. Go-lua is an implementation of the Lua programming language written purely in Go. We use go-lua as the core execution engine of our load generation tool. This post outlines its creation, provides examples, and describes some challenges encountered along the way. There's More to Ruby Debugging Than puts() https://shopify.engineering/17489080-theres-more-to-ruby-debugging-than-puts 2015-02-24T15:12:00.000Z 2015-02-24T15:12:00.000Z "Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." - Brian W. Kernighan Debugging is always challenging, and as programmers we can easily spend a good chunk of every day just trying to figure out what is going on with our code. Where exactly has a method been overwritten or defined in the first place? What does the inheritance chain look like for this object? Which methods are available to call from this context? This article will take you through some under-utilized convenience methods in Ruby which will make answering these questions a little easier. Building Year in Review 2014 with SVG and Rails https://shopify.engineering/building-year-in-review-2014-with-svg-and-rails 2015-02-11T14:43:00.000Z 2015-02-11T14:43:00.000Z As we have for the past 3 years, Shopify released a Year in Review to highlight some of the exciting growth and change we’ve observed over the past year. Designers James and Veronica had ambitious ideas for this year’s review, including strong, bold typographic treatments and interactive data visualizations. We’ve gotten some great feedback on the final product, as well as some curious developers wondering how we pulled it off, so we’re going to review the development process for Year in Review and talk about some of the technologies we leveraged to make it all happen. Building and Testing Resilient Ruby on Rails Applications https://shopify.engineering/building-and-testing-resilient-ruby-on-rails-applications 2015-01-29T19:16:00.000Z 2015-01-29T19:16:00.000Z Black Friday and Cyber Monday are the biggest days of the year at Shopify with respect to every metric. As the Infrastructure team started preparing for the upcoming seasonal traffic in the late summer of 2014, we were confident that we could cope, and determined resiliency to be the top priority. A resilient system is one that functions with one or more components being unavailable or unacceptably slow. Applications quickly become intertwined with their external services if not carefully monitored, leading to minor dependencies becoming single points of failure. For example, the only part of Shopify that relies on the session store is user sign-in - if the session store is unavailable, customers can still purchase products as guests. Any other behaviour would be an unfortunate coupling of components. This post is an overview of the tools and techniques we used to make Shopify more resilient in preparation for the holiday season. Tuning Ruby's Global Method Cache https://shopify.engineering/17489064-tuning-rubys-global-method-cache 2015-01-21T15:52:00.000Z 2015-01-21T15:52:00.000Z I was recently profiling a production Shopify application server using perf and noticed a fair amount of time being spent in a particular function, st_lookup, which is used by Ruby’s MRI implementation for hash table lookups: Hash tables are used all over MRI, and not just for the Hash object; global variables, instance variables, classes, and the garbage collector all use MRI’s internal hash table implementation, st_table. Unfortunately, what this profile did not show were the callers of st_lookup. Is this some application code that has gone wild? Is this an inefficiency in the VM? Docker at Shopify: How We Built Containers that Power Over 100,000 Online Shops https://shopify.engineering/docker-at-shopify-how-we-built-containers-that-power-over-100-000-online-shops 2014-11-18T19:22:00.000Z 2014-11-18T19:22:00.000Z This is the second in a series of blog posts describing our evolution of Shopify toward a Docker-powered, containerized data center. This instalment will focus on the creation of the container used in our production environment when you visit a Shopify storefront. Read the first post in this series here. Why containerize? Before we dive into the mechanics of building containers, let's discuss motivation. Containers have the potential to do for the datacenter what consoles did for gaming. In the early days of PC gaming, each game typically required video or sound driver massaging before you got to play. Gaming consoles however, offered a different experience: predictability: cartridges were self-contained fun: always ready-to-run, with no downloads or updates. fast: cartridges used read-only memory for lightning fast speeds. easy: cartridges were robust and largely child-proof - they were quite literally plug-and-play. Predictable, fast, and easy are all good things at scale. Docker containers provide the building blocks to make our data centers easier to run and more adaptable by placing applications into self-contained, ready-to-run units much like cartridges did for console games. Rebuilding the Shopify Admin: Deleting 28,000 lines of JavaScript to Improve Dev Productivity https://shopify.engineering/rebuilding-the-shopify-admin-improving-developer-productivity-by-deleting-28-000-lines-of-javascript 2014-10-28T18:43:00.000Z 2014-10-28T18:43:00.000Z 6 minute read This September, we quietly launched a new version of the Shopify admin. Unlike the launch of the previous major iteration of our admin, this version did not include a major overhaul of the visual design, and for the most part, would have gone largely unnoticed by the user. Why would we rebuild our admin without providing any noticeable differences to our users? At Shopify, we strongly believe that any decision should be able to be questioned at any time. In late 2012, we started to question whether our framework was still working for us. This post will discuss the problems in the previous version of our admin, and how we decided that it was time to switch frameworks. Building an Internal Cloud with Docker and CoreOS https://shopify.engineering/235340559-building-an-internal-cloud-with-docker-and-coreos 2014-10-15T15:50:00.000Z 2014-10-15T15:50:00.000Z This is the first in a series of posts about adding containers to our server farm to make it easier to scale, manage, and keep pace with our business. The key ingredients are: Docker: container technology for making applications portable and predictable CoreOS: provides a minimal operating system, systemd for orchestration, and Docker to run containers Shopify is a large Ruby on Rails application that has undergone massive scaling in recent years. Our production servers are able to scale to over 8,000 requests per second by spreading the load across 1700 cores and 6 TB RAM. Kafka Producer Pipeline for Ruby on Rails https://shopify.engineering/kafka-producer-pipeline-for-ruby-on-rails 2014-07-22T15:28:00.000Z 2014-07-22T15:28:00.000Z In the early fall our infrastructure team was considering Kafka, a highly available message bus. We were looking to solve several infrastructure problems that had come up around that time. We were looking for a reliable way to collect event data and send it to our data warehouse. We were considering a more service-oriented architecture, and needed a standardized way of message passing between the components. We were starting to evaluate containerization of Shopify, and were searching for a way to get logs out of containers. We were intrigued by Kafka due to its highly available design. However, Kafka runs on the JVM, and its primary user, LinkedIn, runs a full JVM stack. Shopify is mainly Ruby on Rails and Go, so we had to figure out how to integrate Kafka into our infrastructure. Building a Rack Middleware https://shopify.engineering/building-a-rack-middleware 2013-09-04T20:46:00.000Z 2013-09-04T20:46:00.000Z IdentityCache: Improving Performance one Cached Model at a Time https://shopify.engineering/identitycache-improving-performance-one-cached-model-at-a-time 2013-04-04T13:24:00.000Z 2013-04-04T13:24:00.000Z What Does Your Webserver Do When a User Hits Refresh? https://shopify.engineering/17489012-what-does-your-webserver-do-when-a-user-hits-refresh 2013-03-19T15:23:00.000Z 2013-03-19T15:23:00.000Z Introducing the Super Debugger: A Wireless, Real-Time Debugger for iOS Apps https://shopify.engineering/introducing-the-super-debugger-a-wireless-real-time-debugger-for-ios-apps 2013-01-16T19:36:00.000Z 2013-01-16T19:36:00.000Z RESTful thinking considered harmful - followup https://shopify.engineering/17488868-restful-thinking-considered-harmful-followup 2012-03-31T22:45:00.000Z 2012-03-31T22:45:00.000Z RESTful thinking considered harmful https://shopify.engineering/17488860-restful-thinking-considered-harmful 2012-03-30T13:12:00.000Z 2012-03-30T13:12:00.000Z Webhook Best Practices https://shopify.engineering/17488672-webhook-best-practices 2012-01-11T15:32:00.000Z 2012-01-11T15:32:00.000Z Defining Churn Rate (no really, this actually requires an entire blog post) https://shopify.engineering/defining-churn-rate-no-really-this-actually-requires-an-entire-blog-post 2011-11-28T20:10:00.000Z 2011-11-28T20:10:00.000Z If you go to three different analysts looking for a definition of "churn rate," they will all agree that it's an important metric and that the definition is self evident. Then they will go ahead and give you three different definitions. And as they share their definitions with each other they all have the same response: why is everyone else making this so com Application Proxies: The New Hotness https://shopify.engineering/17488588-application-proxies-the-new-hotness 2011-11-22T20:17:00.000Z 2011-11-22T20:17:00.000Z Three Months of CoffeeScript https://shopify.engineering/three-months-of-coffeescript 2011-11-07T22:01:00.000Z 2011-11-07T22:01:00.000Z Most Memory Leaks are Good https://shopify.engineering/17488512-most-memory-leaks-are-good 2011-10-14T16:32:00.000Z 2011-10-14T16:32:00.000Z How Batman can Help you Build Apps https://shopify.engineering/17488488-how-batman-can-help-you-build-apps 2011-09-19T17:30:00.000Z 2011-09-19T17:30:00.000Z Making Apps using Python, Django and App Engine https://shopify.engineering/17488456-making-apps-using-python-django-and-app-engine 2011-09-07T19:09:00.000Z 2011-09-07T19:09:00.000Z Webhook Testing Made Easy https://shopify.engineering/17488436-webhook-testing-made-easy 2011-08-30T17:32:00.000Z 2011-08-30T17:32:00.000Z How we use git at Shopify https://shopify.engineering/how-we-use-git-at-shopify 2011-08-24T17:53:00.000Z 2011-08-24T17:53:00.000Z Developing Shopify Apps, Part 4: Change is Good https://shopify.engineering/17488360-developing-shopify-apps-part-4-change-is-good 2011-08-08T22:29:00.000Z 2011-08-08T22:29:00.000Z Developing Shopify Apps, Part 3: More API Exploration https://shopify.engineering/17488332-developing-shopify-apps-part-3-more-api-exploration 2011-08-03T22:52:00.000Z 2011-08-03T22:52:00.000Z Developing Shopify Apps, Part 2: Exploring the API https://shopify.engineering/17488316-developing-shopify-apps-part-2-exploring-the-api 2011-07-29T21:58:00.000Z 2011-07-29T21:58:00.000Z StatsD at Shopify https://shopify.engineering/17488320-statsd-at-shopify 2011-07-28T19:04:00.000Z 2011-07-28T19:04:00.000Z Prognostication For Fun And Profit: States And Events https://shopify.engineering/17488276-prognostication-for-fun-and-profit-states-and-events 2011-07-26T20:22:00.000Z 2011-07-26T20:22:00.000Z Developing Shopify Apps, Part 1: The Setup https://shopify.engineering/17488288-developing-shopify-apps-part-1-the-setup 2011-07-23T00:06:00.000Z 2011-07-23T00:06:00.000Z Why developers should be force-fed state machines https://shopify.engineering/17488160-why-developers-should-be-force-fed-state-machines 2011-06-13T14:41:00.000Z 2011-06-13T14:41:00.000Z Session Hijacking Protection https://shopify.engineering/17488076-session-hijacking-protection 2010-11-23T18:56:00.000Z 2010-11-23T18:56:00.000Z Shopify's path to Rails 3 https://shopify.engineering/17488072-shopifys-path-to-rails-3 2010-11-16T18:46:00.000Z 2010-11-16T18:46:00.000Z ActiveMerchant version 1.9 released https://shopify.engineering/activemerchant-version-1-9-released 2010-10-15T13:00:00.000Z 2010-10-15T13:00:00.000Z