When selecting the appropriate technology stack (or tech stack), we must consider not only the features and compatibility of available technologies but, more importantly, the specific context – a set of circumstances and requirements that the software application needs to address.
A tech stack refers to the combination of programming languages, frameworks, libraries, and tools used to build and operate a software application or system. With so many options available, deciding which tech stack is the best fit for a particular project can be overwhelming.
In this blog post, we will explore what a tech stack is, how the tech stack can influence a project, why context is essential when selecting a tech stack, and how to use context to make an informed decision. Guidelines in this blog are applicable to any type of software development project. However, we also delve into some specifics of life science and laboratory software, as this is our field of specialization.
What is a tech stack?
A stack is like a vertical arrangement of things placed on top of each other. In our case, “things” are technologies used for the development and operation of software.
The tech stack typically includes a programming language, a framework, libraries, databases, and other tools that work together to develop and provide the functionality and features of the application.
Platforms and operating systems are environments in which our software will run. They range from desktop and mobile applications to web platforms. Sometimes we can decide which platforms will be used. However, target platforms are usually predetermined in requirements, especially for client-side software.
Programming languages are formal languages used to write instructions for computers to execute tasks. They provide a way to express algorithms and logic in a human-readable form that computers can understand and execute.
Databases are an integral part of a tech stack, and are structured collections of data that are organized, stored, and managed in a way that allows for efficient information retrieval, updating, and querying.
Frameworks are pre-defined structures that provide a foundation and reusable components for developing software applications. They offer pre-built functionalities, libraries, and conventions that simplify and accelerate development by providing a structure and set of rules to follow. Frameworks often come bundled with libraries specific to the framework’s domain, enabling developers to leverage existing code for common tasks.
Libraries are collections of pre-written code modules or functions that provide specific functionalities and can be used by developers to streamline and simplify the development process. Libraries often encapsulate complex operations or offer ready-to-use components, enabling developers to leverage existing code rather than starting from scratch.
Development tools are applications or programs used to assist in software development, testing, deployment, and maintenance. These tools can include integrated development environments (IDEs) like Visual Studio, debugging tools, performance analysis tools, project management tools, and version control systems like Git.
When discussing tech stack, we typically separate apps into frontend and backend tech stack. Frontend tech stack refers to the client-facing part of a software application or website, focusing on UI/UX components. Backend refers to the server-side handling of data storage and processing. For standalone apps, frontend and backend tech stack may not be as distinct.
The tech stack encompasses the technologies used for both the user interface and underlying logic. Standalone apps may include a database for persistent data storage, such as SQLite, or external options like MySQL or PostgreSQL.
In Figure 1, we provide examples of all the technologies for each layer of a tech stack. Due to their differences, the examples are categorized separately for server-side and client-side applications. Additionally, we categorize the examples based on web apps, mobile apps, and desktop platforms for client-side apps. Please note that this list is not exhaustive.
Figure 1: Examples for each layer of a tech stack for server-side and client-side software.
How can the tech stack influence the project?
The tech stack can also impact the scalability of the project. Some technologies are better suited for handling large amounts of data or traffic, while others may struggle to handle high volumes. Choosing the right tech stack can ensure that the project is able to grow and adapt to changing needs over time.
If a project anticipates dealing with massive amounts of data, a distributed database like Apache Cassandra or MongoDB can provide horizontal scalability by distributing data across multiple nodes. This allows for efficient handling of high-volume data and read/write operations.
On the other hand, if data consistency and complex queries are more critical than scalability, a relational database like PostgreSQL or MySQL, with their advanced querying capabilities, might be a better choice.
Maintenance and Support
Certain technologies may demand greater maintenance efforts due to frequent updates or patches, or they may present challenges when troubleshooting issues, especially for small businesses. This can impact the overall cost and effort required to keep the project running smoothly.
Supported target platforms
A selected stack of technologies can affect a project’s ability to support different platforms, such as operating systems or devices, in several ways. For example, it can impact cross-platform compatibility, native integration with platform features and APIs, development tools and environments, and availability of third-party libraries and frameworks.
Desktop computers are the most common type of computer in laboratory environments. Still, mobile devices, such as tablets and smartphones, are also increasingly used for tasks such as data collection, instrument control, and communication.
The tech stack can also influence the security of the project. Some technologies may have better built-in security features or be more resistant to common attacks, while others may be more vulnerable.
Embracing programming languages like Rust with strong type systems and memory safety features can mitigate common security vulnerabilities like buffer overflows or injection attacks.
The cost of the project also depends on the selected tech stack, both in terms of development and ongoing operation. Some technologies may require expensive licensing fees, while others may be open-source or freely available. Additionally, certain technologies may require more specialized skills or experience, impacting the overall development cost.
In the world of software development, news about new technologies, frameworks, programming languages and libraries are constantly emerging, often on a weekly or even daily basis. Each one promises to solve developers’ issues and complaints, which can be exciting and tempting to try out for a project. However, when it comes to production-level projects, it’s crucial to choose reliable, low-risk technologies that also offer the necessary tools for development.
There are only two kinds of languages: the ones people complain about and the ones nobody uses. – Bjarne Stroustrup
A popular technology stack is more likely to have extensive documentation, community support, and a wide range of available resources, such as libraries, plugins, and tools. The larger community also provides a robust knowledge base, making it easier to troubleshoot issues and solve problems. Additionally, a popular tech stack is more likely to attract talented developers who have experience with the technology, making it easier to hire skilled professionals and build a competent team.
A great starting point for the evaluation of popularity can be the Stack Overflow annual developer survey, where you can see how much certain technologies are used, how loved or dreaded they are, and how many developers want to learn how to use them.
To delve deeper into the essential attributes of a good software, we suggest this article: Don’t Save on Quality: Essential Attributes of Good Software.
It’s easy… NOT!
Going through the list above, one could think that picking the tech stack is easy: just pick technologies that provide loads of functionality, are scalable, easy to maintain, support many platforms, and are secure and cost-effective.
However, there are at least two reasons why it’s not that easy. Firstly, trade-offs exist where an easy-to-use framework may lack certain features or security, and a popular framework may not support required features or target platforms. Secondly, each project has a unique context, and like many decisions, there is no one-size-fits-all answer.
First, it’s essential to understand what the “context” is. Once we have a clear understanding of what context entails, we can explore why it’s important and how to use it when picking the tech stack.
What is the context?
In general, context refers to the circumstances, conditions, or environment in which something happens or exists.
When picking a tech stack, the context refers to the specific set of circumstances and requirements that the software application needs to address. This can include factors such as the intended use of the application, the target audience, the budget and timeline for development, the expertise of the development team, the scalability and performance requirements, and the availability of resources such as servers or APIs.
The importance of the context
Context is important when picking a tech stack because it helps identify the project’s specific requirements, constraints, and goals. Contextual considerations can help to ensure that the chosen tech stack aligns with the project requirements and can be implemented effectively, efficiently, and within budget. Without considering the context, the team may end up selecting a tech stack that is not well-suited to the project, which can lead to delays, cost overruns, or even project failure.
How to use context when picking a tech stack?
1. Understand the project requirements
Start by gathering information about the project’s goals, objectives, and requirements. This should include factors such as the intended use of the application, the target audience, and the scalability and performance requirements.
Laboratory software might also have specific data security and privacy requirements, which can significantly impact the selection of the tech stack. For example, some users might want to have periods of offline use or even never connect to the internet at all.
Life science projects typically involve large amounts of data, such as patient data, clinical trial results, and genomic data. The tech stack you choose should be able to handle this data securely and efficiently.
2. Identify technical constraints
Before making any final decisions, we should look at which parts of our tech stack are already decided or non-negotiable because of any technical constraints. These constraints could include hardware or software limitations or compatibility issues with existing systems.
Certain parts of the tech stack may already be set in stone. For example, suppose you are developing a new system that uses an existing database or even just a new module for an existing system. In that case, it’s important to choose a tech stack compatible with the existing system. It can also be helpful to consider commonly used combinations of technologies, as they often have well-documented resources, community support, and existing open-source libraries that can help reduce project costs.
Life science projects often also require integration with other systems, such as electronic health record systems, laboratory information management systems, and clinical trial management systems. Choose technologies that are interoperable and can easily integrate with other systems. Again, looking at commonly used combinations can help you find a tech stack with the best support.
3. Compliance and regulations
Compliance and regulations play a critical role in selecting a tech stack for software projects, especially in laboratory environments. Specific regulations such as FDA and GxP must be considered.
We won’t go into details of regulations in this blog, so you are invited to read our other articles:
- Software Development for the Pharmaceutical Industry
- How to Implement 21 CFR Part 11 Features into your Software
- The Importance of Database Systems for Laboratory Software in 21 CFR Part 11 Regulated Environments
4. Team’s skills and expertise
By following the previous points, you can already prepare a list of possible technologies that will provide all the necessary functionality for your project. Still, there is another important part of the project’s context – the team that will be developing the software.
If the team has expertise in a specific programming language or framework, it can enhance efficiency and cost-effectiveness by using that technology. However, if the team lacks proficiency in a particular tech stack, opting for a familiar tech stack or providing training for the necessary skills may be necessary. Additionally, for complex projects requiring specialized expertise like machine learning or artificial intelligence, selecting a tech stack that aligns with those requirements may be crucial, regardless of the team’s familiarity with the technology.
5. Evaluate different tech stacks
Sometimes the best way to decide if a particular technology is a good fit for your project is to give it a try. There might be a specific feature, UI element, or database query for which you are not sure if the selected framework or library provides all the necessary functionality with elegant implementation. Writing a bunch of custom code to adapt the library to your needs can quickly turn into a mess.
The team should prototype and test the selected tech stack to ensure it meets the project requirements and performs well. This will also help you identify any potential issues, limitations, and trade-offs associated with each tech stack, such as development time, maintenance requirements, scalability, performance, and cost.
Are you planning a new software development project for life sciences? Learn more about our tech stack.
In this blog post, we have covered the crucial aspects of the tech stack selection process. We explored the definition of a tech stack and its impact on software development projects and emphasized the significance of the project context.
When making a decision, it is vital to thoroughly understand project requirements, including compliance, regulations, existing technical constraints, and the expertise of your development team.
While making an informed decision early on is important, it is also essential to remain open to potential changes. New information can emerge, altering our decisions, and it is impossible to foresee everything in advance.
By considering these factors and maintaining a balance between informed decision-making and adaptability, you can lay a strong foundation for a successful tech stack selection process.