Building a tech startup - is a complex, multistep process with many pitfalls and traps waiting on the way. However, some prior analysis and proper strategy could help founders to avoid many painful mistakes.
There is a well-known truth about the software - the less time an error exists in your system - the cheaper it costs to fix it. Unfortunately, this rule works similarly in the opposite direction. The more time you spend with an error or a wrong decision, the more outcomes it creates and the more it cost to solve it or even just to progress with them. That’s why the very first decisions you made starting your breakthrough project should be very carefully considered. And selecting a proper technology stack is definitely one of them. And unfortunately, there are so many examples of the wrong choice. Take Twitter. Initially, it was built on Ruby and then almost fully rewritten in Scala and Java, also with a different architecture. How many millions of dollars do you think this wrong choice cost them?
As a startup CTO and principal architect in Centaurea (Startup-as-a-Service company) - selecting technology stack is a pretty common task for me. I do this either for a startup we build or as a part of consulting services. And there are many variables I normally take into account when making a decision (if it will be interesting to you - ask me and I will write an additional post about the selection criteria).
But, one of the key criteria - is a technology lifecycle phase. On his interview about Flash in 2010, Steve Jobs noted that every technology has its own "spring", "summer", "autumn" and eventually get on the graveyard of history. And Apple’s approach is to select tech which is in their “spring” phase to ensure it will be a long term benefit for the company and clients using it.
This is very similar to my ideas. Startup - is a company, a business for tomorrow, not today. It really will shine in 2-3-5 years from now and when selecting tech stack, the Founder should be ensured it’s still will be relevant at that time and keep pushing the business forward, instead of slowing things down.
So I selected a list of promising technology which I advise you to consider for your startup because I believe they are fresh and promising, but already mature enough to be used in production and provide value for your startup and business.
Main area: Frontend development
Competitors: React, Angular, Ember and approx 17 millions of other frameworks
Why: Last years it was a clear trend to bringing some functional and reactive concepts into development and add more structure to code with models, basic patterns and abstractions. And Vue follows all these trends, but the main key benefits are that it still allows you to keep simple things simple, it’s not pushing you hard to use concepts you really don’t need. Modern Angular - is an enterprise level tool because of how restrictive it is and also have a high entry threshold. React it’s no longer a standalone technology, you will need to bring 197 small pieces together to really make it work and when you one more time need to make something simple, it still will force you to write 1347 lines of code to follow official guidelines and best practices. And Vue is a different there - you need something quick and simple - you will be able to do this with a few lines of code, but if you need a spaceship - it’s also there.
Main area: Programming language, used almost everywhere
Main area: cross-platform development framework, backend development
Competitors: Java Platform, nodejs / JS
If you will look to a google trends chart you will see a clear difference:
This is a “Java” trend over the last 5 years
This is a “.NET Core” trend over the last 5 years
So the difference is clear. And with platform growth, I would bet on .NET Core (and later .NET 5) as a major general purpose dev platform during the next several years. We build some projects using it and majorly happy with results and effort.
4. React Native
Main Area: Cross-platform mobile development
Competitors: Xamarin, Ionic, Phone Gap, Flutter, etc
Why: Since the smartphone world split on IOS and Android ecosystem it was a dream about technology allowing to write a single version of the code which then will be working smoothly on both platforms. And there are many approaches to attack this problem on a market now, but it’s probably possible to say that React Native was the first who really succeed with it. So now, if you need a quite of a standard application without heavy requirements around performance or graphics - it probably will select something cross-platform instead of building 2 native applications. And pretty possible that technology wise React Native isn’t the best among its competitors, but the fact that huge company supporting it, some large applications were written on it and there is already a big community and many different components implemented with a relatively high pool of engineers - making React Native selection just a wise idea from the business side standpoint.
Main Area: Cross-platform desktop application with the web stack
Competitors: NW.js and Neutralinojs (logically same things), wxWidgets, QT, etc
Why: The desktop application isn’t such often things nowadays when it’s all about the web, mobile, IoT, etc. But even with the less hype, there is still plenty of opportunity for desktop application, especially in a business and enterprise sectors. And Electron.js (honestly similar to NW.js and Neutralinojs) develop truly cross-platform app much faster than before using well-known web tech stack. If you don’t need top edge performance (i.e. games) - using this framework could save you tons of time and money. We build a moderately complex ETL for a business client and with Electron was able to build the same application almost 2.5 times faster than competitors, who build apps for each platform. And you get much easier update and deployment just out of the box.
Main area: machine learning library
Competitors: python ML ecosystem, MLPack, Tensorflow, etc
Why: Many years Python was the number one choice when it comes to machine learning. Because it has a superior ecosystem and tons of fantastic libraries like scikit-learn to do the job. But often Python itself was a problem. I personally build specific microservices to encapsulate Python part out of the rest of the system and rewrite parts of algorithms on Java and C# just because of company policies or licenses associated with the software. So the coolest thing about ML.NET is that it’s bringing a solid ML experience to the .NET ecosystem and you could simply continue writing your application the same language and technology stack but adding ML awesomeness without thinking how to better integrate Python parts. It’s not as functional for today, but it provides a lot of useful things which should be enough for many common ML areas in your startup and it's constantly developed.
Main area: DevOps, Container orchestration
Competitors: Docker Swarm, Apache Mesos, Vagrant
Why: If you start your startup today, in 9 of 10 cases you will host it in the cloud and it will contain from multiple parts. So Kubernetes (k8s) it’s just a current industry standard to orchestrate your infrastructure properly. This year it was k8s 5th birthday and according to research currently up to 63% of the infrastructure of leading tech companies are managed with it. Sometimes it’s just wise enough to follow the industry leaders.
Bonus (yeah, I know - the article is called "7 tech", but it’s nice sometimes to over exceed expectations)
8. CI / CD
Main area: Delivery and deployment
Competitors: Manual or any other approach
Why: It’s not exactly a technology. It’s more like an approach to the management of how you plan to develop, deploy, deliver your product to the customer. Majority of modern startups are complex applications contains from multiple parts and trying to organize them manually and deploy with some manual rule - is just a dangerous way with an easy ability to screwed up anything and convert your development and delivery process into chaos. I believe there are no Founders who want this. So properly organized Continuous Integration and Continuous Delivery workflow could save you a lot of time and nerves and it’s a wise early investment for a majority of startups.
Main area: writing client-side browser code with general purpose programming languages
Competitors: Not really
Main area: Blockchain
Why: Well, being in the industry for a long time I see the same pattern again and again. There is a niche technology arise but it’s a huge marketing effort around it trying to advertise it as a general purpose technology which should be used everywhere and will solve every problem. Definitely, the same story happens with a Blockchain. My position about it is simple: there is too much noise around it and in reality, it’s a very niche tech with a strict set of applications. But in its own area Blockchain could be superiorly useful and help to solve many problems. So if you assured that you need a Blockchain at your startup than Hyperledger - is definitely a good place to start. It’s an open source union of tech and framework for efficient blockchain development.
Enough for today. I hope this article was helpful to you. If you like the content please like it and share it with others, also follow us on your favorite social media. Feel free to ask any question in comments or directly. If some of my advice will provide you financial benefits and you will feel like you want to give something back - just donate something to a good deed: ecology, education, cancer-beating or stop hunger. And please, don't follow my advice blindly. This article's goal is to give you more information to consider yourself, but not forcing you to use this tech.
We also could provide you with a qualified consultation giving you advanced answers to your questions, or build you a state of the art software, or give your startup an opportunity to be at least 1 year ahead of your competitors.
Thanks for reading.
P.S. I get several complains that I didn't add any database to this list and it's a critical part almost for any application. I did this for a reason. Database - is one of the most limiting parts in the system and should be selected really carefully with a deep understanding of a product needs it should solve. The wrong choice for a DB could hurt you much more than other parts of your system. That's why I don't want to make a quick assumption on it. I know nothing about your project, so how could I recommend something? But if you need one 'generic' choice to start investigating - PostgreSQL could be a starting point. But if you not confident and your app is data intensive - spend a little on a professional consultation. That's nothing in comparison to platform development price but could save you out of the serious troubles.