A technology stack is the underlying infrastructure building blocks of a software application. These are the frameworks, languages, and third-party software products that the application is built on.
Choosing the right tech stack is one of the most important decisions when building a software product.
The ability to scale quickly depends on many factors, but having the right tech stack may be the most important one.
A properly selected tech stack not only impacts the scalability in terms of performance, it also provides flexibility and agility on product design and evolution, shortens development cycles, eases the creation of ecosystems, and -most importantly- attracts and retains talent.
In this article, I am sharing some of the main building blocks of our tech stack at Intraway that are working great for us.
Cloud-native on AWS
We rely on AWS to deploy our solutions, and we use the well-architected framework as guidance to design and run scalable cloud applications.
Don’t confuse cloud-ready with cloud-native. Only cloud-native applications take total advantage of cloud’s scalability.
Kubernetes and Docker
We use Kubernetes and Docker to run our containerized microservices applications.
This approach ensures scalability and provides an infrastructure abstraction layer to run your applications virtually anywhere.
TIG Stack (Telegraf, InfluxDB, Grafana)
A very powerful solution for metrics collection, analysis, and monitoring:
- Telegraf – The agent that collects the data
- InfluxDB – The database that stores the data
- Grafana – The UI that makes the data looks pretty
ELK Stack (Elasticsearch, Logstash, Kibana)
Provides centralized logging and makes log searching, analyzing, and visualizing easy:
- Elasticsearch – The database and search engine for log data
- Logstash – The agent that collects, parse and transform log files
- Kibana – The UI to visualize and manage log information
It is supported by Google with a large community and a lot of well-documented resources.
Don’t confuse Angular with AngularJS.
Backend: Java / Spring Boot / Microservices
Java is the main language we use to develop back-end applications and SpringBoot is a Java-based framework used to create microservices that you can “just run”.
We also use C++ and GO for some specific components.
Database: MongoDB and MySQL
We use MongoDB for most applications. MongoDB is a document-oriented NoSQL database that performs great for unstructured data.
We use Mongo Atlas that is the cloud, managed version of the MongoDB.
We also use MySQL for those use cases where we need to manage structured and relational data.
Messaging System: Apache Kafka
Kafka is a stream-process platform with high-throughput and low-latency for handling real-time data feeds.
We use Kafka as a messaging system to share information between applications, creating a scalable decoupled architecture.
Adopting standards simplifies interoperability with your ecosystem and makes it easier for customers and partners to understand and integrate your applications
Infrastructure as Code (IaC) with Terraform
IaC is the answer to managing large-scale, distributed systems, cloud-native applications, and service-based architectures.
Continuous Delivery with Git / Jenkins / Helm
A good CI/CD pipeline speeds up the process to get changes of all types -new features, configuration changes, and bug fixes- into production, safely and quickly.
Slack for Communication and Automation
We embrace ChatOps as part of our DevOps practice.
We leverage Slack and Botpress integration for automating repetitive Q&A, support, and operation tasks.
We also use different slack channels for receiving alarms from our monitoring systems.
Building a great software product is the art of productizing industry knowledge and best practices by creatively combining a scalable tech stack with an amazing user experience journey.