Tech Stack 101: How to choose a stack of technologies to fit your project
Tags: webdev, tutorial, devops
Published: 2021-03-24 14:37:44

The idea that developers use code to create complex applications is correct yet superficial. In reality, every development specialist will use a very specific set of tools to get a job done. As there are always many available tools to complete a certain task, you want to be sure that the instruments chosen by your [development team](https://maddevs.io/customer-university/differences-between-software-engineers-seniority-levels/?utm_source=devto&utm_medium=stack-of-technologies-to-fit-your-project) meet your needs. 

We in the industry refer to this collection of instruments to be applied in a project as the tech stack.

##What is a tech stack?
A tech stack is essentially the array of technologies one chooses to build their project with. It is composed of solutions you prefer to create such elements of the system as the application and data storage, DevOps tools, and business-centric integrations.  

Let’s take a look at an example. Netflix uses a combination of Python and Java to power its back-end. React is used for the front-end of the app. They use MySQL and PostgreSQL to handle the databases. And finally, the streaming giant relies on Amazon to take care of the infrastructure. 

The combination of these and other technological solutions was chosen purposefully to match the exact needs of the business, as every element is designed to allow flawlessly streaming videos, downloading content, and receiving relevant suggestions. 

Obviously, each software development project is unique so there’s no universal formula for picking the perfect tools. The right choices can only be made based on thorough analysis in each case.

##How to choose a fitting tech stack?
Now that we’ve settled on the importance of having the right tech stack from the get-go, let’s dive into the process of defining one. 

There’s an effective workflow that helps both the team and the customer understand the needs of the project.

* **Step 1:** Gather the requirements. Before coming up with solutions, a good tech lead and his team of developers will do their best to understand the product. Who is it targeted at? What are the features to be included? How should they work from the technical point of view?
* **Step 2:** Identify business goals. This stage is designed to answer the “why’s.” Why do we need the product? Why would the audience care? Why should the features work in one way and not another? 
* **Step 3:** Put your finger on high-level technical details. You will need the CTO, the technical leads, and the DevOps team on this stage as they will identify the vision, infrastructure, and technical needs and translate them into technical requirements and tasks for the development team. 
* **Step 4:** Involve the team. This is the stage where the developers analyze the challenges ahead and propose the most efficient solutions to the CTO.

##Crucial elements to consider when choosing a tech stack
There are some obvious factors you’ll need to consider when choosing an appropriate tech stack. For instance, a banking application that has access to personal records and accounts of clients needs to be built with security in mind. A video streaming service, on the other hand, should focus its tech stack around handling high load. 

Start with figuring out the **scope** of your project:
* **Small scale:** These are simple websites, portfolios, blogs, magazines, etc. You probably won’t need too much aside a simple selection of front-end tools and frameworks like Webflow or React.
* **Medium scale:** These are large websites, e-commerce projects, or enterprise applications that have precise business logic. They’ll need a combination of front-end and back-end technologies as well as convenient means of handling data and storage. These types of projects usually run on several systems so cross-platform integrations make more sense than building several native apps from the ground up.
* **Large scale:** These are entire social networks, e-commerce platforms, SaaS products, etc. They are typically feature-rich, user-oriented, and demand security, scalability, speed, and serviceability as the four primary pillars one can build upon. The best approach here is to analyze tech stacks that have proven performance in the market. Thinking of competing with Netflix or Uber? Look what’s under their hood first. 

**Time to market** is yet another crucial aspect you should think of before settling on a tech stack. There are times when speed is of the essence and, as such, integrations and as-a-service products are your best friends. Keep in mind that you’ll need to invest in replacing them with home-made alternatives when your project succeeds and grows. For now though, stick to the basics and get the product running.

Lastly, there’s the aforementioned **security**. It’s best to keep it in mind from the get-go when there’ll be at least some sensitive user data involved.

* Use integration if need be, but think about building a custom API to carry them out
* Analyze potential ways of securing access be it through encryption or through limited time token-based access
* Explore several database options as you’ll need a reliable solution to continuously store backups
* Investigate any other options or alternatives that may either compromise your product’s security, or improve it

##Risks of choosing a wrong tech stack
Landing on the perfect tech stack for a project is quite rewarding. You will end up with a scalable development cycle capable of adjusting to business needs, the skill of your developers, and the availability of resources.

Wrong tech stack choices, in turn, can lead to these problems:

* **Growing with an old technology that will be hard to support in the future:** The world of technology is full of uncertainties as new technologies emerge while others get forgotten. This does not mean that no stable or reliable technologies exist on the market, but going with the newer thing may oftentimes be the safer bet for large-scale projects. Newer technologies are better for two major reasons:
undefinedundefined
* **Poor quality of integrated components:** Third-party integrations are among the [most frequent causes of security breaches](https://www.reflectiz.com/the-key-threats-and-risks-that-third-parties-create-to-websites/) in software. Security concerns aside, most integrations require specific skill sets from developers. This raises the risk of getting stuck with a particular team regardless of whether you are satisfied with their results as the alternative is to remake the product from scratch. 
* **Higher maintenance costs and more re-work:** Speaking of third-party integrations, various choices and options don’t differ in functionality alone. Ongoing fees and licensing costs differ as well. Picking a solution that does not scale well or grows in price too much as your project progresses will lead to greater investments on your side. Moreover, replacing one integration with another on later development stages demands colossal volumes of re-work. [Click here to learn more what are the reasons for the high maintenance costs of software](https://maddevs.io/customer-university/software-maintenance-costs/?utm_source=devto&utm_medium=stack-of-technologies-to-fit-your-project).


##Integrations and As-A-Service products VS custom components
Discussing third-party integrations, we focused on their potential negative aspects, but in fact, an integration is neither good nor bad in itself. In some cases, third-party tools are absolutely necessary. 

Let’s imagine you are just starting a brand new project. Investments are slim, there’s no proof of concept yet, and your audience hasn’t even laid eyes on the product. Investing time, effort, and resources in building every feature from the ground up is simply a waste at this stage. 

Another type of a project is a large-scale one with a lasting history and an impressive user base. It can still benefit from a plethora of additional tools, but frankly, integrations rarely make sense at this stage. Third-party solutions are a jack of all trades. They will often lack specific elements of functionality you may require as the project grows in scale. 

In other words, integration can become a bottleneck at later stages of development as it simply doesn't have the functionality you need and there’s no way of adding it. 

Then there are SaaS, PaaS, IaaS, or other as-a-service products. They may sound similar to an integration - at least on paper - but they are, as the name suggests, services. The difference is that your product is not integrated with them. Instead, you use them to perform a set of specific functions and all of the management, new feature development, and support lies on the shoulders of the service provider. 

Aside from this obvious benefit to using aaS, there’s also the fact that most of the services that could have been done by now are already available, so there’s no need for businesses to reinvent the wheel. It’s much more efficient for smaller companies to build their product using available resources and run things from there with actual feedback on hand. Largest companies should delegate those elements that are not mission-critical as well (whenever it makes financial sense). DropBox, for instance, was using AWS services straight to the point when developing their own data centers was more cost-efficient, while Netflix still relies on AWS just because it’s cheaper that way for them. At least for now. 

That said, aaS products fall to the same shortcomings of integrations: they lack the scalability. Every business will outgrow them sooner or later whether due to the potential financial gains or to security limitations. 

###So, should you use integrations in your tech stack?
**Pros:**
* Quick and simple in implementation
* Accessible and more budget-friendly

**Cons:**
* Limited functionality
* Lacking the potential for your scalability as the expenses grow alongside the project


###What about developing all systems in house?
**Pros:**
* Much more flexible and tailored to your project
* More secure and reliable

**Cons:**
* Development takes a lot of time and resources

##Bottomline
There are no silver bullets in software development. Every project, even if it is similar to other solutions, is unique in at least one way. That’s why putting your finger on the perfect tech stack is one of the most important strategic decisions you’ll be making throughout the entire development lifecycle and even far beyond it. Please, consider the factors we’ve mentioned in the article above when designing a scalable, future-proof tech stack. 

Previously published at [maddevs.io](https://maddevs.io/blog/how-to-choose-a-stack-of-technologies-to-fit-your-project/?utm_source=devto&utm_medium=stack-of-technologies-to-fit-your-project)