Shopify's engineering team writes about Ruby, YJIT, Rust, infrastructure scaling, React Native and WebAssembly.
HN commenters call it an interesting blog, and link it for Ruby YJIT performance and a web framework explainer.
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 :)
> 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
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 !.
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-versioning-breaking-changes
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.
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-hacking-time.
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-improving-developer-productivity-by-deleting-28-000-lines-of-javascript). 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.