What stack would you choose today to write something like Shopify?

Hey,
For a business like Shopify being able to add new features in a Paul Graham’s viaweb style would be very important (aka using a powerful expressive language). Additionally since Shopify is an all in one solution that includes hosting, payments etc, the platform needs to be secure and use the cloud efficiently to optimize profit margins. Thus I am curious whether you would choose Elixir/Phoenix/Ecto or some other stack to write something like Shopify today? If possible please share your reasoning as well.

Thanks.

I think your comparisons between languages and frameworks is looking at the problem from the wrong angle.

As has been said in other threads – you should look for the real selling points in the runtimes themselves.

I have just recently answered you here. Is there anything unclear? Anything that didn’t leave you quite satisfied with mine, and others’, answers?

For a quick answer, Erlang/Elixir’s runtime (the BEAM VM) is a perfect fit for any network service – especially web! – except for the cases when you need the last drop of performance per watt, in which case you should go for C++ or Rust or D. The reasons why the BEAM is excellent for web have been already very well documented and my compressed linked answer is, I dare saying, not a bad summary.

2 Likes

Thanks for replying,
I am still learning so please excuse me if some of my questions are redundant to the community, they are not redundant to me because I am not yet aware why they are redundant. I am creating these topics in the chat sections where I am assuming a higher degree of potential redundancy is acceptable. The reason why I am asking what seems to be a similar question from different angles is because I am curious how different infrastructures could benefit from the same implementation. Aka a chat app is totally different from a content management system (in my eyes). Also it’s possible that someone could have different experiences in this particular context and share stuff that wasn’t shared in the previous thread. This wasn’t meant to mean that I am dissatisfied etc. I am just being curious. :slight_smile:

2 Likes

These kinds of questions are a little strange for a few reasons.

  1. Shopify are built on Ruby on Rails. Apparently, an old slow technology like Rails still works.
  2. When you ask in a specific language forum, you will most likely not get objective answers.
  3. To be honest, you will most likely not build the next Shopify. I think a good approach is to think smaller and create an app that can serve maybe 100-1000 customers.

With that said, I would pick Phoenix everyday of the week. But if someone asked me if they should switch from Rails or Laravel for their new startup, I would most likely say no. It’s hard enough to create a startup and learning a new language should not be one on your mind.

But also, your chances to succeed will be higher if you pick a mature tech stack with a large(-ish) eco system that suites your needs.

Thanks. I like to ask strange questions. IMO it’s irrelevant whether I am actually trying to build a shopify app or not. This being in the casual chat category should be treated more like a philosophical discussion on programming rather than a serious “help needed”-like question. If you think it’s a stupid question (which it very well might be) that’s okay with me. As for not able to get an objective answer here, not sure if that’s true. I understand that some members here are biased as probably most who frequent this forum appreciate Elixir, but that doesn’t mean they appreciate only Elixir so I am still willing to give smart people the benefit of the doubt as opposed to categorizing them as biased and incapable of producing an objective thought. I would also expect people who really love Elixir to be aware of its weaknesses therefore letting me know if using Elixir for x is good or a bad idea.

1 Like

It is different only in a business sense and from the point of view of the normal human. They share quite a lot technologically:

  1. A chat app requires a solid WebSockets implementation – which Elixir has inside the Phoenix project, whose quality is enabled by the BEAM;
  2. A good CMS and a good web app require a runtime that allows thousands or millions of HTTP requests/responses be handled fairly and without one request impeding others which is, you guessed it, what the BEAM is about.

So to help you understand why asking similar questions from different angles could be redundant, ask yourself if the app you have in mind:

  • Needs to serve a lot of people?
  • Needs to not lag?
  • Needs to be reliable?
  • Doesn’t need to run as close to the metal as possible? (Example of the reverse would be video transcoding or AI – Deep Learning – calculations.)

If you answer “yes” on all these the chances are very good that Elixir will serve you fantastically.

Conversely, with PHP / Ruby / Python, the web deployments need to resort to all sorts of finicky tricks like keep 20 workers waiting for HTTP requests. What happens when there are 21 or more requests? Those beyond 20 simply wait their turn. If the server is beefy enough you will never notice but the problem is there and will manifest itself in the most inopportune of times.

Elixir’s Phoenix won’t do that. If you get 10_000 requests they all get an OTP process and they all work in parallel (some restrictions apply to database pools but that’s separate).

Lastly, nothing that Elixir can achieve is impossible to be imitated well enough by many others (see Java’s Akka framework for one example). Hell, people write their web apps in C++ even.

But many of us want certain guarantees (fault tolerance, lagless operation, huge parallelism and concurrency abilities etc.). They help us focus on actually delivering value. Our time isn’t 50% - 80% dedicated to operations and system administration. Our time goes to make our customers succeed.

Ask away if anything more is still unclear. Don’t think me hostile, I was legitimately confused about the goal of your question here at first.

2 Likes

That’s not objectively true. If you spend enough time around here you’ll see people like me and several others who regularly tell people NOT to use Elixir for problems X or Y.

1 Like

Sure. Good point.

I don’t hink its stupid. Sorry if it come off like that. You will have an easier day if you pick the right tool for the job. But there are enough examples in the world of successful businesses that where build with the wrong tool and made it anyway.

its hard to anticipate the future struggles of your company/app.

But since you are here, and seems to be interested in a web facing app, I definitely think Elixir / Phoenix it the right fit for you. :slight_smile:

2 Likes

It’s probably not the main purpose of Elixir/Phoenix to replicate what has been done with other frameworks.

When You compare frameworks, You might be more productive with OOP, something that is more common.

If You use Phoenix, You need to learn FP, and it’s a brutal change. So if You do it, make something different, and try to benefit from the BEAM power.