Author Marko Krstic
The best programming language to build an MVP
Building a technology startup might be fun on one hand, but on the other hand it is actually not easy at all. There are a lot of obstacles, unknowns, competition etc. mixed in together, which makes it sound even more scary. Even though there are real problems for every startup, this blog post will focus on the right technology for a startup.
Let's imagine you have an idea about a digital product you want to build, you asked around a bit about the product you want to make, you got positive feedback and decide to dive into coding. The next step would be to pick the best programming language out there to validate your MVP.
What is the goal of building a minimum viable product? It is to check if people would like to use your software, see if it solves a real problem for someone and, particularly, if anyone is willing to pay for it. You might have done extensive research ahead, but real acknowledgment of your idea comes only if somebody pays you for it. Not if someone tells you he/she will pay or is willing to pay, but only if someone pays you, transfers their money to your bank account. That's the validation you are looking for.
This is why you want to find out as soon as possible if you have a viable product so that you can either focus further on your project or tweak the idea or even change it completely. In order to find out, you need to get a product to the market as soon as possible.
So, there might be two possibilities for creating MVP: (1) you already know how to build a software, you are familiar with one programming language and you want to do it by yourself; or (2) you don't know how to and you either want to hire someone to do it for you or you want to learn how to do it yourself.
If you already know some programming language, the technology that will get you to the market faster is the technology you are already familiar with. If you know nodejs, go with it; if you know ruby on rails, go with it; same with php, python, go, java, elixir, clojure etc. If you already know some technology and are familiar with it, use it, resist the temptation of learning new technology stack for your new project.
It’s true that some languages are better suited for some projects and certain needs, some of them scale better and have better performance than others. However, at the beginning you don't know if anyone will use your project or if there will be enough traction, so don’t worry about these things and go with what you know. At the beginning, you will not be dealing with performance issues and you won’t need to scale your app. Maybe the time will come where a change will be necessary, but not at the start and thus do not waste time on this.
Every language has its own benefits and drawbacks; some things that you can do easily in language A are more difficult a language B and vice versa. Keeping that in mind, if you start building an MVP with a language you are not familiar with, you might struggle with some things that would be trivial in the language you know. Even trivial things in a technology you don't know are not so easy to solve. Because of the lack of knowledge in a specific technology, you might inadvertently use anti-patterns or introduce security issues which could ultimately cause big problems. With a language new to you, you will spend a lot of time tackling uncertainties, learning all corner cases and the process of building the necessary software will definitely take much longer.
Since your goal is to get to the market sooner rather than later, you should go with what you already know. Don't fall into the trap of learning the latest programming language and tech just because it's cool. There are plenty of examples of how people failed because they wanted to pick the shiniest new technology for their products. You are building a business, that's what matters.
For the ones in the second category who would like to hire someone or to learn on their own, I've narrowed down which language to use to 4 possibilities.
Ruby on Rails
First option is Ruby on Rails. Ruby is a great language and Rails is an amazing framework that allows you to build a web application quickly. I have used it for a couple of years and have had positive experiences with it.
Ruby is a great choice for building a minimum viable product (MVP) because the process of developing web applications is super fast and the product can be delivered to the market quickly. Ruby also has great tutorials and a huge community, which is extremely important while learning how to code.
However, a downside could be performance and scalability depending on the project. If it's a significant web application with a rate of hundreds or thousands of users per second, it might show performance issues. Since we are talking about an MVP, we know that performance and scalability issues won’t be a problem at the beginning and therefore, Ruby is still adequate.
Elixir and Phoenix
If performance is a concern, the second programming language of choice could be Elixir and Phoenix framework. Many Ruby developers are moving towards Elixir, whose syntax is very similar to Ruby and both Rails and Phoenix are great frameworks for rapid software development.
Elixir is a more functional language when compared to Ruby, which is object-oriented (something not necessarily relevant when building an MVP). If I had to choose between them, I would go for Elixir if performance is a problem. A video shows a performance comparison between Ruby on Rails and Elixir/Phoenix (it also allows you to see how fast you can build a scaffold web application using both). The following video shows that Elixir/Phonex is more than 50 times faster than Ruby on Rails.
PHP and Laravel
A third choice would be PHP and Laravel. PHP has been one of the most popular languages in the market for web development for years. And it still is, if not the most popular one. You won't struggle to find developers if you need additional resources since literally half of the web is running on PHP.
Laravel is a fantastic framework designed to build web applications quickly. It's one of the favorite frameworks among PHP developers. Developing new applications with Laravel is easy, and the time to create an MVP is short. That's why it is so popular and broadly used.
Another option would be Go (Golang). It's an extremely powerful, very lightweight, and easy-to-learn language. Developers find it a pleasure to work with due to its simplicity and ease of reading. Beginners can also learn the language very quickly.
Many companies rewrite their enterprise web applications from Java to Go since the consumption of RAM and CPU is much lower, saving a significant amount of money spent on infrastructure. Golang, compared to Elixir, is more than 35 times faster and consumes 30 times less memory. It's clear why it has gained a lot of popularity.
With Go and Buffalo framework, it's effortless to achieve rapid web development. Buffalo is as great as Rails, Phoenix, and Laravel but not as mature and does not yet have as strong of a community.
It's also straightforward to build web applications using just Go without any framework, which most developers do. Go has excellent performance, and it's built with scalability and concurrency in mind.
There are also many other languages, but these 4 are great for startups. I personally use Go most of the time, but the other three are also very good.
If you want to achieve rapid web development and get to the market as soon as possible without worrying about performance (since it's an MVP, and that's ok), I will go with Ruby on Rails.
In the second place, I will probably put PHP/Laravel or Elixir/Phoenix. Just to mention that Elixir is a functional language that has good performance (way better than PHP or Ruby), but it is also a bit more challenging to find good developers.
And finally, I'd recommend Go. If you pick Go and Buffalo, bear in mind that Buffalo doesn't have a strong community yet, which might be a problem if you need support. So the safer bet would be using Go without any framework, but the development will not be as fast as with the other three languages.