If you are a developer who is still in school or freshly (drop) out of the college or you just have a couple of years of corporate experience and have decided to take on the entrepreneurial journey as a tech-(co)founder / CTO of a startup, this series will help you understand various aspects and the role you will have to play as a technology leader for the success of your startup.
The motivation behind this series is to enable tech(co)founders who are at early-stage or at growth-stage in their startup journey to become technology leaders.
This is the first chapter of the series “First Time CTO”. It’s not the most critical thing that I want to highlight in this series but it’s definitely the most popular & the most urgent question that I have come across during my interactions with young entrepreneurs. So, I wanted to make sure that this topic should be covered first, than anything else. Also, to set the perspective right, I won’t emphasize “what to choose” but “how to decide what to choose” should be the outcome of this post. And, this is what the DNA of this series too.
Programming languages evolved from machine to assembly to high-level (HLL) simply for the ease of development. Afterward, how evolution took place is quite interesting to understand.
In the 80s, developers started using C to build enterprise applications because it provided better control on UNIX-based systems. When enterprise applications became the mainstream during the software revolution, people started realizing that it’s difficult to maintain these applications as businesses were using various hardware & platforms. C & C++ were not the best (not platform-independent) when it comes to the maintenance & support aspect of the applications built-in C/C++.
Then, came the era of JAVA. It made developers’ life way easier than before. Now, developers didn’t have to worry about platforms much. Their entire focus was on building one piece of code and if it worked in one system then it would work on other systems too. Obviously, there are trade-offs. It requires more system resources to be consumed but as the cost for hardware was declining, JAVA became the go-to-language for the enterprise applications.
Then came the age of the internet. JAVA being the populist choice, web-frameworks like Spring/Struts started getting attention but then the problem statement also evolved. Firstly, JAVA was designed for enterprise solutions so it was a bit bulky compared to what was needed for a pure web-based application. Secondly, alternatives like PHP required a not-so-steep learning curve like JAVA. Also, dynamically-typed languages reduced the development cycle (preferred choice because the servers running the code in production-environment is now under control hence maintenance & support becomes easier) in conjunction with the agile-process of development. PHP like languages started replacing JAVA for web-development.
Later on, the open-source and community-driven development & support led the ecosystem towards quick go-to-market in a cost-effective manner, the first priority for entrepreneurs.
The evolution of web-frameworks, platforms, databases, etc to the current date progressed on similar lines. The motivation behind sharing this evolution is to make you understand that the choice of a tech-stack depends on the reality of the then present time.
So, coming back to the original question “how do we make the right choice about the tech-stack”.
Depending on your business the choices can be limited by either elimination or selection. But here I am assuming is, as a tech(co)founder you understand, what your needs are. As in, you need a relational database (ACID compliant) or not or need it partially. You need a read-intensive or write-intensive system. How advanced, your caching requirement is. Anything that you are building you need to have it in mind that it should be horizontally scalable to the least. You might not know the intricacies or might not have a deep understanding of scalability but you should be aware enough, about the possibility.
If your business is B2B & it’s about building a core tech platform say like Kafka-as-a-service or on-demand database-as-a-service or Docker like application, etc
Since it’s a core tech platform and your business revolves around providing scalable tech & optimal solutions [CRITICAL] to other businesses (B2B), so the core has to be robust in terms of resource utilization to scale it vertically as well. Also, another angle to look at it is, the success of your business is dependent on the success of your clients. Now, if you goof their customers, you will be screwed too. So, “move fast & break things” do not work in these scenarios.
So for every SaaS business, the core has to be close to the native?
Not necessarily !!
If you are providing a ticketing service to your clients or a chatbot service or marketing email service, etc.
Your success still depends on your client’s success only. The thing to understand is you are providing an important solution to your clients but it doesn’t fall in the category of TIME-CRITICAL for a majority of your clients. So if that’s the case, in the beginning, your focus should be to look for ease of development, keeping iterations & stability both in mind. Later, you might have to change your tech-stack but well, you will have resources for that.
What about B2C businesses?
In B2C businesses, the challenge is to get the right product-market fit at the earliest. And, that can be figured out, by multiple rounds of iterations. So, something which requires development time to be less should be your option. To give you a perspective, Facebook was built using PHP & MySQL. Quora was built using the Python-Django framework.
More iterations do not mean developing an unstable system, the point to note here is “Ease of development”.
We have shortlisted a few possible frameworks, databases, stacks, etc but now what?
Simply, look how big the community is. The only troubleshooting guide you have in case you face issues is Google. If the community is big or backed by big companies/communities, great you might find your way out if you get stuck somewhere.
My thumb-rule: Opt for something which is neither too young nor too old.
This is something that plays not just as a tie-breaker but also as an aspect of technology not becoming the hindrance in scaling the business. Based on your startup location, you need to be aware of the fact that how easily you can find developers especially in areas where the knowledge-expertise is required. eg.
If I want to build a mobile app in Flutter / React-Native / Vue-Native etc, my decision would depend on how easily I can find developers in the market. Since the app is residing at customer-end and because of a limited control, a person with good exposure to app development should be preferred over a smart-learner with limited experience. It’s not a hard-and-fast rule and depends on the complexity of the product, how well-versed you are to provide backup support in emergency situations but it plays a major role in making the choice.
In 100% of the cases, tech(co)founders write code when they start-up. If you don’t, either you start writing it or look for a different role.
If you are quick with experimenting & figuring out new languages, frameworks, etc, good. But if it slows down your pace, you should opt for something which you are comfortable with because your aim is quick turnaround & go-to-market. You can always come back to this when you have resources in hand.
Best Case Scenario: If your startup scales massively, how hard is it to scale your tech?
Obviously, the answer to it depends on the scale and most of the entrepreneurs live for the best-case scenario. But if you can be pragmatically optimistic and come up with the best-case scalability figure then having an idea about ease of horizontal scalability can help you make your decision simpler.
How money is related to finding the right tech-stack!!
It’s related but not in a sense that money decides the tech-stack but when the business is proven and investors have poured you with money and now, you have to build the right product for your business. In such a case, your business has a decent runway, you have to think about your tech-stack for the long-term.
What that means is, you do not have the liberty of changing your tech-stack from scratch in midway when you have the visibility of your business growth. You might have to design your product-development processes in such a way that it does not slowdown iterations but changing your tech-stack would be a crime in times of growth.
TECH SHOULD ENABLE THE BUSINESS TO FIND RIGHT MARKET FIT AND SHOULD NOT BECOME HINDRANCE WHEN THE BUSINESS IS GROWING.
I have worked in various business verticals from Travel to Logistics to FinTech to Crypto-exchange & Blockchain and so far what has worked for me is, find options that can efficiently solve the problem, the system can be scaled easily if not efficiently, and the developers are easily available when needed.
As I mentioned earlier, the choice of the tech-stack depends on the present realities of the then time but the factors affecting those decisions mostly not. The idea behind this post is to bring those factors to help you make conscious decisions. I have other ideas in the pipeline on tech-culture, decision-making, scaling the technology & the team, tech-leadership, processes & hindrances, etc will be covered in this series “First Time CTO”.