Was it the website, maybe piping the data from servers to site? Was organizing the containers for the repls hard?
The website is the least challenging part but not because it's easy or simple but because it's the thing that there's already an industry standard for. However, building the container infrastructure and the IDE is something that we had to do from scratch and innovate on and was and continues to be quite challenging.
We built the world's fastest and first server-rendered IDE. The IDE has a small functional core -- borrowing ideas from Redux -- everything is a plugin. This architecture allows us to build an adaptable IDE where it starts very simple and grows with the user as they learn more and require more horsepower -- this is crucial for newcomers. More about the IDE here: https://repl.it/site/blog/ide
- As for our infrastructure, we're building a new kind of computing platform: it's Serverless in that users don't have to care about the underlying resources, but it's not Serverless in that it's stateful. This way it's interactive, and since we focus a lot on people new to programming, it's a much more natural programming model. We're also building a filesystem abstraction that allows your working directory to travel with your container between development and production and as it goes offline and online.
@21natzil back when we were building the code execution service at Codecademy it was the time before containers. So to sandbox an interpreter running potentially malicious code was much harder. We had to do a lot of language-level sandboxing. Meaning we'd check that your code isn't trying to do anything fishy. In some ways, this is a lot harder and limited how many languages we can add.
However, in other ways, it was easier because what we were building at Codecademy was a lot smaller in scope. There was no debugging, no linting, no deployment, no packages, etc. It was just one thing, run the code.
When the time came to implement this for Repl.it the tech landscape had changed a lot. Instead of building it with NodeJS like we did at Codecademy we chose Go. Instead of doing the sandboxing ourselves, we went with containers (although we still do a lot of custom stuff to make it more secure). Of course, I learned a lot and applied what I learned but there is always a risk of trying to do too much the second time around. This is called the second system effect.
I think this is a great question, I can talk about my experience in which was the hardest part in building Repl.it, but I need to think about it more in depth and I'll get back to you with a concrete answer.