Shopify Engineering
shopify.engineering · Company blog · on HN since 2016
Shopify's engineering team writes about Ruby, YJIT, Rust, infrastructure scaling, React Native and WebAssembly.
What HN saysHN commenters call it an interesting blog, and link it for Ruby YJIT performance and a web framework explainer.
268HN people shared it
111linked it in comments
276stories submitted
8.0Kstory points
2 months agolast shared
2016people per year2026
Most-shared posts
- 1Deconstructing the Monolith – Shopify Engineering9 people · 15 points · first shared 2019 · discussion on HN
- 2Our Experience Porting the YJIT Ruby Compiler to Rust7 people · 169 points · first shared 2022 · 89 comments on HN
- 3E-Commerce at Scale: Inside Shopify's Tech Stack – Stackshare.io7 people · 6 points · first shared 2018 · discussion on HN
- 4How we built the Black Friday Cyber Monday 2023 globe6 people · 172 points · first shared 2024 · 23 comments on HN
- 5What Is Nix (2020)6 people · 16 points · first shared 2021 · 3 comments on HN
- 6We replaced Redis with MySQL for inventory reservations–and it scaled6 people · 11 points · first shared 2026 · discussion on HN
- 7Under the River6 people · 7 points · first shared 2026 · discussion on HN
- 8Deconstructing the Monolith: Designing Software That Maximizes Productivity6 people · 2 points · first shared 2022 · discussion on HN
- 9Five years of React Native at Shopify5 people · 331 points · first shared 2025 · 216 comments on HN
- 10How Shopify Uses WebAssembly Outside of the Browser5 people · 243 points · first shared 2020 · 130 comments on HN
- 11Shopify invests in research for Ruby at scale5 people · 181 points · first shared 2022 · 166 comments on HN
- 12Migrating to React Native's new architecture5 people · 128 points · first shared 2025 · 76 comments on HN
- 13YJIT: Building a New JIT Compiler for CRuby5 people · 85 points · first shared 2021 · 47 comments on HN
- 14Ruby 3.2’s YJIT is Production-Ready5 people · 61 points · first shared 2023 · 8 comments on HN
- 15How to Build a Production Grade Workflow with SQL Modelling5 people · 18 points · first shared 2020 · discussion on HN
What HN people wrote when they linked it
quadrature · 2018-05-01
Shopify | Developer | Toronto, Ottawa, Montreal, Waterloo | FULL-TIME ONSITE VISA| http://shopify.com
Shopify is a platform that allows entrepreneurs to easily setup an online store. Our products help merchants who are just starting as well as established brands that need a solution that can scale with their traffic.
We're always working on products that make it easier for entrepreneurs to reach their audience and help them make data driven decisions.
Shopify is built in Ruby on Rails running on a stack composed of Docker, Golang, Mysql and Redis. Our data infrastructure uses Kafka, HDFS, Zookeeper and we use PySpark and Sklearn for our data modeling and machine learning tasks. If you're interested in building tools that empower Entrepreneurs come take a look at who we are and what we're doing
- blog: https://engineering.shopify.com/
- github: https://github.com/Shopify
- job postings: https://jobs.lever.co/shopify?lever-via=XBuWsYM_Q2
Regardless of where you're applying this year I'd say make sure you focus your application on specific roles, highlight your work and personal projects (over academics) and don't treat interview results as a reflection of personal worth. Good luck with your job hunt !.
stack_framer · 2025-12-24
I've found Shopify's blog interesting (and I don't happen to use Shopify or have any affiliation with them):
https://shopify.engineering
apstats · 2023-12-18
Very interesting blog post! My best guess as to how shopify is able to achieve such large increases in speed is they have a lot more actual ruby code than most codebases (https://shopify.engineering/ruby-yjit-is-production-ready).
masom · 2023-08-01
It really depends what you design your system to handle. A sudden burst of traffic that can be spread for minutes is fine (ex: Elasticsearch indexing requests can usually be delayed through background jobs).
> Basically those things only sort of work if you have few messages and are happy with millisecond latency.
Not really... queues are great to defer processing or have longer running job than your HTTP and TCP timeouts will allow. Building large data export won't happen within a single HTTP request.
ex: https://shopify.engineering/high-availability-background-jobs
dlyons · 2023-02-27
I second the recommendation for zero-to-nix, it's a great resource. I really like what DetSys is doing for the Nix community!
In addition to that, check out this Shopify video series:
- https://www.youtube.com/playlist?list=PLRGI9KQ3_HP_OFRG6R-p4iFgMSK1t5B…
- https://shopify.engineering/what-is-nix
I share a bunch of configuration between my M1 Macbook and x86 desktop in my office. I use home-manager with config that looks like nixos/*, macos/*, and common/*. The first two just import the latter. Here's a link if it's helpful:
- https://github.com/dustinlyons/nixos-config
jmconfuzeus · 2022-08-21
Just search for TCP handshake on Youtube.
Then install a program called Wireshark. Search Youtube on how to use it to inspect traffic.
Then read this excellent article on how web frameworks actually work: https://shopify.engineering/building-web-app-ruby-rails
Unless you're looking to build your own web framework or something that's all you need to know for backend development because everything is nicely encapsulated these days.
If you want to build frameworks and stuff then learn C and grab a book called TCP/IP Illustrated.
nithayakumar · 2022-08-17
Facebook definitely does it. Thats where we first learned about this way of working. Some bigger tech companies have actually written about it (see links below) but a list of ones that we've seen with this kind of infra include LinkedIn, Shopify, Dropbox, Stripe, Slack, DataDog, and Palantir - to name a few.
Eng blog links:
LinkedIn: https://engineering.linkedin.com/blog/2021/building-in-the-cloud-with-…
Shopify: https://shopify.engineering/modelling-developer-infrastructure-teams
Slack: https://slack.engineering/development-environments-at-slack/
Doximity: https://technology.doximity.com/articles/github-codespaces-is-great-bu…
vjrajto · 2022-01-01
jstanier · 2021-10-01
Shopify (https://www.shopify.com) | Frontend / Backend | UK and Europe
Come and help us make commerce better for everyone.
We're expanding into EMEA and I'm hiring out the team here. I'd love to work with you.
We're fully remote (https://www.shopify.com/careers/work-anywhere) and have a fantastic engineering culture (https://shopify.engineering/)
EMEA engineering roles I'm hiring for: https://bit.ly/3l0Sfut
If you'd like to talk to me directly, then you can email me at james dot stanier @shopify.com, ping me on Twitter @jstanier, or find me on LinkedIn: https://www.linkedin.com/in/jstanier/
ibraheemdev · 2021-01-02
There are probably a lot of benefits to be gained from Rails on Wasm. For example, Shopify recently posted an article about how they use Wasm outside of the browser to execute untrusted code (user scripts) [0]. It is also worth mentioning that although Artichoke supports WebAssembly as a build target, compiling to Wasm is not the only way to execute an Artichoke program.
0: https://shopify.engineering/shopify-webassembly
exterm · 2020-09-17
Hey Leafboi - I recommend reading the first post in the series for some background https://engineering.shopify.com/blogs/engineering/deconstructing-monol…
We don't use "hardware" or "VMs" to facilitate modularity.
radihuq · 2020-04-08
Hopping on the topic of addresses and not completely related to your point - but if anyone's having challenges with handling address fields I'd highly recommend checking out Shopify's address package:
https://github.com/Shopify/quilt/tree/master/packages/address
And corresponding blog post:
https://engineering.shopify.com/blogs/engineering/handling-addresses-f…
szastupov · 2017-03-28
It totally depends on task at hand. If you have a db/forms heavy project than Rails/Django gives you advantage, if your project is more driven by interactions and subtle UX then SPA lets you focus on that.
Like, imagine how hard it would be to make Shopify as SPA (https://engineering.shopify.com/17489056-rebuilding-the-shopify-admin-… On the other hand, Trello would never feel so fluid if it was driven by server rendering (notice how weird Github projects comparing to Trello).
Personally, I've been doing SPA for years and think it's the right way for reach UI. But recently I had to build a form-heavy app and decided to go with classical server-side setup + some jQuery on client. Old school but very productive.
EDIT: added link to shopify blog.
Tainnor · 2022-02-08
> But are they more productive, get shit that we care about done [...]
I think there's a balance to be struck between "getting shit done" and "write something that will be maintainable in the future".
It might be true that (some?) Haskellers overdo it, but I've definitely seen enough of the "let's just get shit done" people who create messes that are completely unmaintainable and full of bugs after just a year or two.
And IMHO, the software industry is in a really sorry state, considering how bug-riddled most software is, how most software projects fail or are considerably above budget, etc. [1]
I've seen quite a number of failed projects in the companies I've been so far, a number of them involving quite a lot of resources. I've seen companies trying to rewrite hopeless messes and failing at it, grinding everything to a halt, because the code base is full of implicit assumptions that nobody bothered to properly specify anywhere. I've read about Shopify spending a whole year to upgrade to a newer version of Ruby on Rails.[2]
Probably the industry doesn't yet know how best to find this balance but I don't think that the Haskellers are solely to blame for this.
[1]: https://danluu.com/everything-is-broken/
[2]: https://shopify.engineering/upgrading-shopify-to-rails-5-0
jsloa071 · 2021-04-01
Appreciate the feedback and recommendation! You're right that explicit judgments can get stale - fortunately for our document collection the information architecture and article structures themselves are slow-changing (the answers themselves might change, but the document that answers the question probably won't for some time). We also primarily use explicit judgments to label head queries/common topics, and may augment our datasets with fresh data from time to time. The team is currently exploring augmenting these human-made datasets with automatic judgments using click models.
For realtime feedback, we've implemented (on another search product at Shopify, not the Help Center) a "near"-time feedback loop using implicit judgments to alter search results. Perhaps I'll write a post about that one soon :) . My colleague Doug talks a bit about the new systems we're building in this blog post - https://shopify.engineering/apache-beam-for-search-getting-started-by-…
jeanyang · 2020-09-23
Hi @simonhamp, founder/CEO of Akita here. :) It sounds like you have good internal discipline about what could potentially break your API and that's great. The point you bring up, that surely the code can't be the only documentation of an implicit contract, is exactly what we've been observing, in that the code is often the only documentation. The example we gave (service/service dependency) was an extreme case of this, though we have seen this. More subtle examples would be changing an error code, or changing from one specific type of string to another (for instance, two datetime formats). Propagating these changes to dependencies, especially in larger systems, can cause some real headaches. Would love to talk more to understand how you've gotten around some of these with good process!
Shopify has this great blog post about their solution for change management in their external APIs that also makes the point that change impact analysis is not easy: https://engineering.shopify.com/blogs/engineering/shopify-manages-api-…
Also, quick point: we don't proxy for precisely the reason you brought up. Akita works without sending any user data back to our servers, just the metadata.
cordellyee · 2018-02-01
Shopify | Developers and Designers! | Toronto, Ottawa, Montreal, Waterloo | FULL-TIME ONSITE VISA| http://shopify.com
Shopify is a platform that allows entrepreneurs to easily setup an online store. Our products help merchants who are just starting as well as established brands that need a solution that can scale with their traffic.
For devs: Shopify is built in Ruby on Rails running on a stack composed of Docker, Golang, Mysql and Redis. Our data infrastructure uses Kafka, HDFS, Zookeeper and we use PySpark and Sklearn for our data modeling and machine learning tasks.
For design: Our design teams are always growing, we’re improving the UX of commerce for merchants all over the world. We built Polaris, our design system which helps us build consistent experiences for all merchants.
If you're interested in building tools that empower Entrepreneurs come take a look at who we are and what we're doing:
- blogs: https://engineering.shopify.com/, https://ux.shopify.com/
- job postings: https://jobs.lever.co/shopify?lever-via=1_PEVU3ujn
Our interview process isn’t super high pressure, and I think we’ve done a good job so far extending culture and finding good hires. I’d suggest applying even if you aren’t a perfect fit - I was in an weird university situation but was still taken seriously. Cool projects are always a good talking point. Good luck :)
kumama · 2026-08-06
castform founder here. while it's "rare for a specialized model to beat a strong general model" today, i think the tech/knowhow on how to do so is getting there. we see some early signs of this in industry e.g.
https://shopify.engineering/sidekicks-continual-learning-loop
https://thinkingmachines.ai/news/learning-to-replicate-expert-judgment…
https://castform.com/blog/elsa/
at the end of the day, models are only as good as the data they're trained on. and if one has access to proprietary data, it should yield specialized models that do better than larger general models
sciyoshi · 2026-05-29
This is essentially what Shopify did with River (https://shopify.engineering/under-the-river), and we built out something similar at our company.
I'm sure the labs are working on this sort of thing - Managed Agents are probably the closest?
3uler · 2026-05-21
What do you mean? The whole point of Ruby on Rails is the rails way? Also the problems you are describing are not new and the community settled on adding some sort of service layer
https://shopify.engineering/shopify-monolith
http://sporto.github.com/blog/2012/11/15/a-pattern-for-service-objects…
satvikpendem · 2026-01-22
I mean, this is "fundamentally" wrong. Shopify for example continues to use React Native [0].
[0] https://shopify.engineering/five-years-of-react-native-at-shopify
endgame · 2025-11-30
This article and video might be good for you, but they are more about a conceptual overview of what the fundamental parts of Nix are and how they interact.
https://shopify.engineering/shipit-presents-how-shopify-uses-nix
https://www.youtube.com/watch?v=6iVXaqUfHi4
Flakes are a dependency-pinning and hermetic evaluation feature baked into the Nix tool itself.
Overlays are an idiom that uses lazy evaluation to build up larger attribute sets in a modular and composable way (e.g., package collections for a particular programming language).
iregina · 2025-08-14
You're spot on! We (Shopify) are using it now: https://shopify.engineering/mcp-ui-breaking-the-text-wall
pbronez · 2025-08-10
Cool idea. I thought I’d try to make a Kagi Lens to accomplish the same thing:
https://kagi.com/lenses/LdYine8hZtYmrt8yTMngOUtvTM9rmkRy
Kagi Lenses can be defined in many ways, one of which is specifying URLs to search. Unfortunately you can only provide 10 URLs per lens. Here are the ones I chose:
https://stripe.com/blog/engineering, https://engineering.fb.com/, https://www.uber.com/en-US/blog/engineering/, https://netflixtechblog.com/, https://research.google/blog/, https://technology.riotgames.com/, https://incident.io/blog, https://www.anthropic.com/engineering, https://openai.com/news/, https://shopify.engineering/
cuchoi · 2025-07-08
Funding?
Seems like the development was funded by Shopify and they got a ~20% performance improvement. https://shopify.engineering/ruby-yjit-is-production-ready
A similar experience in the Python community is that Microsoft funded "Faster CPython" and they made Python 20-40% faster.
ajayvk · 2025-06-06
A recent improvement in import map support in the browser https://shopify.engineering/resilient-import-maps
tlavoie · 2025-06-01
Regarding how a bunch of the pieces go together, I found this blog post from Shopify quite useful: https://shopify.engineering/what-is-nix
troad · 2025-02-22
Shopify made the new Ruby JIT compiler. [0] They're on the Rails Foundation, as is 1Password, among others.
Stripe is still in on Ruby too; they're behind the Sorbet gradual type system, and Ruby is a first-class language for working with their API.
I always hear the stereotype of companies starting on Rails and migrating later, and I think it sticks around because it makes some level of intuitive sense, but it doesn't actually appear to happen all that often. I guess successful companies don't see the need to rewrite a successful codebase when they can just put good engineers to work on optimising it instead.
[0] https://shopify.engineering/ruby-yjit-is-production-ready
canucker2016 · 2025-01-16
You'd hope they benchmarked the old native iOS app and the RN app.
Since the blog post doesn't mention previous native-only perf, I'd assume they didn't compare or the RN version isn't close to native-only perf (leaning heavily towards the second reason).
Looking at a previous blog post, the first hunch seems to be correct - the second may also be true.
From 2024 March, https://shopify.engineering/improving-shopify-app-s-performance talks about how their RN-ified app was loading screens in 1400ms (P75) and the steps they took to reduce that to 500ms.
I hope they benchmark their load-screen time with every release/CD to stay on top of any regressions, otherwise, there'll be more mad scrambles when the perf debt piles up too high.
lelandfe · 2025-01-16
500ms is the 75th percentile speed, so 75% of users are having load times faster than that. For context, Google's synthetic p75 loads emulate a crappy old Android phone on a bad network.
A linked post[0] says their p75 was 1400ms before 2023, yowza.
[0] https://shopify.engineering/improving-shopify-app-s-performance