What is Tech Stack and how to Choose It: Interview with Solution Architect at Apiko
Tech stack is a building material for software. It includes all programming languages, tools and frameworks that are necessary to build a complete and independently functioning application. Their broad variety may get frustrating not just when you are new to software development, but also at the beginning of work on any new app.
There’s no ideal software stack, and any well-built application may serve you flawlessly as long as its functionality satisfies the needs of its users. Thus what you really have to pay attention to when choosing technologies is the required key functionality and business drivers:
- what main problem the application solves
- and, in case of planned monetization, what actions you expect a user to take to obtain revenue.
Basic application structure
Just like a building has walls, roof, windows, doors, rooms, etc., the application has its own functional elements, each of which has their unique role. We will not dive into details here, but describe only the fundamental parts any application consists of.
Front end is the part of the application a user can see and interact with, that’s why it’s often called the client side. It’s a program code (HTML, CSS, JavaScript) that determines a whole graphical user interface and page layout, including positions, sizes, and designs of all the menus, buttons, filters, etc. An example of a marketplace landing page is shown below.
It’s clear that when we click on a Profile icon, we will be redirected to a page with our personal data; or , e.g., when we click on a particular item, we will be shown a page with that item’s details.
Behind each button (and any other interactive element) there is a program code that makes it function just the way we expect it to. For instance, it can redirect us to the next page, like in the previous example, or, when we use filters, it can retrieve all matching items from the database. Code that enables app navigation and proper functioning of all app elements, and runs “behind the scenes” for the users, is called back end.
In computing, a database is an organized collection of data stored and accessed electronically from a computer system.
Source Wikipedia
Basic application structure looks the following way.
How tech stack depends on the types of software architecture
Software architecture defines how app components are connected with each other:
- they can be tightly interconnected and function as an indivisible unit (monolithic architecture)
- or they may function as loosely connected and quite independent app modules, also called microservices (microservice architecture.)
Selection of software architecture type is another crucial decision that has to be made before you actually proceed to app development. It may put some restrictions on tech stack choice.
When we need to develop a simple application, it makes sense to stick with monolith. Thus you will avoid unnecessary complicated app structure. As the users’ needs change and grow, it’s a common situation when one wants to extend their already existing software with new features. In this case the tools for their implementation must be 100% compatible with the primary app tech stack.
Another case is when a service grows fast or even disrupts the industry, e.g. Amazon, Netflix, Uber, etc. That’s when multiple new features may be required, with a high chance that no single technology will ensure the best performance for all of them. In this case, a microservice architecture may be a perfect solution.
Since microservices are loosely connected, it’s possible to use different technologies for their implementation. The inter-process communication can be established through APIs.
Moreover, a large and complex application with one database may turn out to be like a skyscraper with a single-door entrance letting through 1 person at a time. Just as it would be more efficient to build a skyscraper with a few entrances, connecting separate databases for different microservices makes a huge difference. It helps to avoid the overcomplicated data storage and routing that we have when multiple services reach one large DB.
Source twitter.com/Werner/
You can find more details about pros and cons of the two app architecture types, and tips on when each of them should be used in the article Software Architecture Types: Monolith vs Microservices.
Technologies overview and tech stack examples
Web and mobile applications require different tech stacks. There are neverending debates on which tools are better, and the truth is that all of them have their strong and weak sides. Here you will find a comparison of some popular mobile app technologies and frameworks, including iOS, Android, React Native, Flutter and Cordova.
Besides the frameworks and means for front-end and back-end development, there are tools that enable proper app infrastructure setup and functioning. They provide storage resources, servers and cloud computing services, automated application deployment, easy updates’ releases, monitoring and management of the apps, scalability, etc. (e.g. AWS, Google Cloud, Docker, Azure, Kubernetes).
Here you can see most of the technologies used for software development at Apiko. Don’t get scared by the long list. Years ago it was significantly shorter and was formed around JavaScript frameworks and tools, as that was the programming language our developers were the most familiar with. It grew according to our gained experience, however you definitely don’t need all of these technologies for a particular project. There are many real-life tech stack examples for web and mobile applications described along with the app functionality in Apiko portfolio cases.
Get in touch with us!
Are you ready to peek at how software development companies choose app tech stack? Solution architect at Apiko Andriy Roman has shed some light on this subject by sharing his own experience.
What is the procedure of choosing a tech stack for an application? What to start with and what to pay the main attention to?
The first and most crucial step is to build a proper business and contextual vision, and define the business drivers.
Once you have a complete understanding of how the app should work, constraints and non-functional requirements determine the technology decisions.
And only when we have all the requirements of architectural significance, we can build system architecture and define technical stack.
What are the non-functional requirements?
Non-functional requirements are critical for tech stack choice, application development, testing, and client’s acceptance, and include
- Reliability and maintainability
- Availability: it can be defined by
- % of time a system or function is up and running
- maximum average downtime
- Performance is a rate of (or a time required for) performing an operation. For example, report generation takes less than 30 seconds, or live video streaming runs at 60 frames per second.
- Operability and usability: the app functions exactly as it’s been planned, and is convenient and intuitive to use
- Security guidelines, e.g.
- Not keeping certain data in a particular storage
- Not exposing some properties on the screen
- Prevention of bulk data set download from the screen, etc.
- Compatibility and portability take into account the supported iOS / Android/browser versions, as well as API versioning when API is part of a product portfolio
- Legal requirements, for example, General Data Protection Regulation (GDPR) compliance, or some other law reinforcements when a customer is from a country where all software users should be provided with specific means for their personal data protection.
Which key factors influence the choice of the tech stack?
Among the top five factors we pay attention to I would mention
- Talent resources availability on the market
- Existing clients’ technologies and knowledge base, e.g. programming languages or tools required
- Non-functional requirements
- Constraints
- Business Drivers
Diving into more details, the technology choice does depend on
- Platform you develop the app for: web, mobile, or both
- App size and functionality
- Having professionals who are experienced with the preferred technology
- Time to market
- Availability of suitable open-source tools to minimize the development cost
- Maturity of the preferred technology
- Active and large developers’ community and support of that particular technology: no framework is perfect, so make sure you will be able to get any required help on time
- App development and testing complexity
- Ability to scale the software as your project grows
- Customization capabilities
What are the main challenges when it comes to choosing a technology stack?
Those are the limitations we experience due to the lack of talent resources who specialize in particular technology, and the ones imposed by existing client’s technologies and knowledge base.
Does the choice of the technologies for app infrastructure setup influence the decision on further tech stack? Are there any compatibility concerns?
No, usually, according to Apiko best practices, system infrastructure is designed as a layer avoiding tight integration with the codebase.
What is your opinion on Apiko tech stack? What types of projects is it useful for?
Apiko is a progressive company with great ambitions to run any type of web-based solutions. Apiko has experience working with healthcare video streaming platforms on RnD basis. Node.js, .Net, React.js, Angular, React Native are highly maintainable, reliable, secure, and scalable technologies that might bring value to overall web-based as well as IoT-based solutions.
How to figure out if the tech stack for a particular app development has been chosen correctly?
In case a product context is defined and business context, constraints, and non-functional requirements are stated, we use the architecture tactics and architecture tradeoff analysis method (ATAM) to define the most and the least suitable technologies for individual solutions.
Which indicators may signal an unsuccessful tech stack pick?
Those are the failures to achieve any of the non-functional requirements:
- performance
- scalability
- maintainability
- reliability
- fault tolerance
- security
How can a wrong technology choice influence further app development?
The worst-case scenario of technology selection leads to complete or partial product rebuild. In case we have long-term ambitions for the product, we are highly concentrated on maintainability so version migration is smooth, and software developers are happy to work with a particular product.
Summary
Having received the basic understanding of app structure, and the valuable insights about picking tech stack at the software development company that Andriy has shared, we are ready to highlight the key points and tips.
- Do not proceed to the tech stack choice until you have figured out all functional requirements, business drivers, and have selected a suitable type of software architecture
- Pay attention to the non-functional requirements and restrictions, and check out only the technologies that conform to them
- Since no tech stack is universally the best, check out the professionals’ availability and their experience, as well as maturity of the considered technology and developers' community around it.
The subject is very broad, and we will be glad to answer any questions concerning your particular project.