I've been in position to give advice to early stage, usually non technical founder a significant number of time since my move in the startup world. One of the most frequent question I get is:
- What technology/language should I use for my web application?
The most correct and succint answer I got is from a colleague, Gilbert West:
- Short version: It does not matter
- Long version: It does not matter
Joke aside, the meaning here is that your company is not going to succeed or fail due to a (early) technology choice.
My own slightly longer (and less punchy) version is:
- Something your developer knows
- Something popular
Let's unpack those.
Something your developer knows
If we start working together on a webapp tomorrow, you probably want me to use something I've used in the past and that I'm confident with. Can I learn new tech? Of course! It's an integral part of the developer skill and I wrote about half a dozen of things I used last year for the first time - but there are costs there.
Using something new means obviously learning (something that takes time), probably being less efficient (more time) and probably making suboptimal choices (even more time). The main issue for me about developing a web application in let's say Express (a tech I'm a bit new to) versus in Rails (a tech I used for at least a dozen projects) is not really learning the language but the ecosystem.
Every technical framework comes with a (usually) large ecosystem of librairies (open source building blocks for standard functionalities) and practices developed along the years. The question are not really whether they are better or worse than others - it's just "the way we do things" in that specific technical area.
Those matters a lot. Going "against" the way a specific technology works is going to hurt. It's going to be uncessary complex and make the code much less readable by someone else.
Learning the ecosystem and practice take much more time than learning a language. To make things practical, if you ask me to manage authentification, upload images or manage an administration panel (all typical requirements of a web application), I directly know what to use for in Rails. In Express, I'll have to google. I'll find out eventually, but again - time.
Again, my example here between Express and Rails is purely based on my background - it would be the exact reverse situation for someone used to Express and having to use Rails for the first time.
In other words - you generally don't want to be my first project with a given technology.
This is linked to the first issue but different. As a business owner what you want on the technical side is security and room to grow - much more than for instance performance.
Security means that if your first developer leaves, someone else will be able to pick it from here. Room for growth means that when your business expands, you'll be able to hire more technical staff to work on it.
Both of those require the technology to be popular. Popular technology means:
- Developers available on the market
- Consultants with deep expertise
- Extensive documentation
- Blog posts, articles, etc
- A lot of questions and answers on Q/A sites like Stack Overflow
In other words, using popular technology means you'll never be alone. Regardless of how good they could be, niche technologies are always dangerous.
The next part here is that in fact, technology is generally "good enough"
Technology is good enough
"But Martin, what if doing my website in Java instead of PHP make it much better?"
You can make a 10M$ business with Java, PHP, Python, Ruby, ... Actually, several people did.
You are not Google
Finally, you get the "but Google" argument - yes, Google need very specific technologies and langages and other stuff to manage their business. But you are not Google. You'll probably never be (and that's ok), and even so, Google did not starts the way it is today.
So, on the technical side, your business has nothing special - and this is good ! You can focus being different in your business, and just use boring technologies to make it happen.
I'm a freelance those days, but this is the advice I give and practive. I develop applications with things like Python, Django and Postgresql - technologies that have been there for 10+ years, continuously improved, sustained by a healthy number of active developers. Mature, "boring" technologies that power the world and make things happen.
Opinions? Let me know on Twitter!