How to Choose the Right Tech Stack for Your Product?
Tags: todayilearned, techstack, article
Published: 2020-07-08 14:59:56

---
title: How to Choose the Right Tech Stack for Your Product?
published: true
description: How to choose the right tech stack for your product?
tags: todayilearned, techstack, article
cover_image: https://dev-to-uploads.s3.amazonaws.com/i/yvcl5it66j0uni2xz8tc.png
---

Last time, I attended an online course which told about how to choose the right tech stack for building product. Thanks to Mr. Yuke from DKatalis Jakarta Tech Hub and Mr. Ibnu from Gits Indonesia for sharing this information :). Here are some key points.

## Contents
* [Tech Stack](#tech-stack)
* [QnA](#qna)
* [System Requirements](#system-req)
* [SQA](#sqa)
* [General Thinking](#general)
* [Case Study](#case-study)

### Tech Stack <a name="tech-stack"></a>
__"Stack"__ refer to __any combination__ of __programming languages__, __tools__, __frameworks__, and __technologies__, or __combination of software products__. There are so many of them.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/yvcl5it66j0uni2xz8tc.png)

```TIPS: There are so many languages to learn, if you are confused with that, learn only 1 language deeply.``` 

### Question <a name="qna"></a>
Question that are frequently asked in events and forum:
* *I want to develop marketplace, is Node.js good choice or not?*
* *I want to develop mobile app, should I use Ionic, React Native, or Flutter?*
And many more...

According to the Speaker, those questions aren't valid. There must be about __quality/priority__ those needed to build those apps.

### System Requirements <a name="system-req"></a>
There are 2 parts, __functional__ and __non-functional__ requirements. 

Functional are focused to __user story__, __use case__ (UML).

Non-Functional are focused to quality attributes such as __scalability__, __maintainability__, __reusability__, __testability__, __utilities__, and many more.

```KEYNOTE: Quality attributes is the most important on choosing tech stack rather than functional requirements.```

### System Quality Attributes <a name="sqa"></a>
There are 3 parts which most important:
1. __Business View__ (Business Goals, Constraint, Cost, Benefit, Markets, Time, Integration with Legacy System)
2. __End User View__ (Performance, Availability, Usability, Security)
3. __Developer View__ (Maintainability, Portability, Testability, Reusability)

### General Framework of Thinking <a name="general"></a>

```TIPS: This is the most important thing.```

1. __List all the quality attributes (QA)__: Listen to all stakeholders and don't give some assumptions. The requirements must be detail and specific.

2. __Prioritize QA__: __Decide__ what is the most important QA, __Compare__ with all alternatives, and __Do__ research.

3. __Evaluate and Evolve__: __Satisfy__ with the solution?, Are there __Critical issues__ or __Blocker__?

### Case Study <a name="case-study"></a>
For example, in this case is developing a hackathon app. To build hackathon app, we must consider the resources, background experience, time and so on. We must breakdown every problem, constraint and challenge. 

For resources, like who is developing, who is maintaining, who will be backup the product, and so on. For experiences, like what language will be used, how efficient to another tools. For time, like how long will be built.

### Conclusion
Factor those are really important is communication and team management. The quality attributes is the most important factors to decide tech stack.

If you are interested, let me hear about your opinions in tech stack :).