What Is Our Backend Tech Stack?
In the ever-evolving realm of information technology, there is something new appearing every day. At Touch4IT, selecting the right technology stack isn't merely a matter of preference; it's a strategic pursuit grounded in a comprehensive vision.
How do we determine the tech stack for a project?
The foundation of our technology selection process is anchored in a forward-looking perspective. We evaluate potential technologies based on their capacity to adapt and evolve with the ever-shifting digital landscape.
Furthermore, our strategy emphasizes the long-term cultivation of internal tooling and knowledge, allowing us to continually innovate and adapt to evolving challenges.
We prioritize technologies that facilitate cross-platform code reuse, enabling us to maximize resource utilization and maintain a consistent user experience across diverse environments.
Additionally, our strategic vision extends far beyond immediate project requirements, emphasizing the long-term building of internal tooling and knowledge.
But what happens when we inherit a project with a pre-existing tech stack?
In such cases, there's often no alternative but to don the mantle of maintenance and development. If a significant change is warranted, we embark on the incremental process of migrating to our chosen stack, ensuring that the legacy project eventually aligns with our strategic technology ecosystem.
In this blog post, we'll delve deeper into the specifics of our tech stack choices.
NodeJS as a shining example of open-source innovation and community-driven growth
Node.js has been an integral part of our tech stack since 2015. At the time, we were looking for technology that could efficiently handle real-time communication. Node.js was well-suited for real-time communication due to its non-blocking, event-driven nature and it could easily handle WebSocket connections.
Node.js' event-driven nature aligns perfectly with backend development requirements. It is designed to handle many concurrent connections efficiently. Its event loop allows it to manage multiple connections without the need for creating separate threads or processes for each request. This is particularly useful for web servers that need to handle many simultaneous clients. Additionally, backend application usually needs to perform I/O operations, such as reading and writing to databases, file systems, or making network requests, this is where Node.js's asynchronous nature shines. It doesn't block the execution of other tasks while waiting for I/O operations to complete, which can lead to more responsive applications.
Node.js stands out as a shining example of open-source innovation and community-driven growth. At its core, Node.js embraces transparency, collaboration, and accessibility. Its permissive MIT License allows developers to harness its power for a diverse array of projects, whether big or small, commercial or open source. It is not just fully open source, but it also boasts one of the most extensive user lands compared to other technologies. With over a million packages covering virtually every aspect of backend development, Node.js empowers developers to accelerate their work, capitalize on the collective wisdom of the community, and bring their ideas to life with ease.
Rust as a game-changer
One of the advantages of Rust lies in its capability to facilitate code sharing between various platforms. Traditionally, managing different codebases for backend, web, and mobile can be a nightmare. By leveraging WebAssembly, Rust allows us to compile code for both web and Node.js environments. For iOS and Android Rust code can run natively. This unified approach not only reduces development time but also minimizes the chances of inconsistencies between different platform versions. Furthermore, this approach allows us to maintain just one set of tests and documentation.
Another compelling reason for our adoption of Rust is its superior performance and memory-handling capabilities. In software development, especially when dealing with complex business logic and data-intensive operations, efficiency is paramount. Rust's strict memory management system, which eliminates common issues like null pointer dereferencing and data races, ensures a high level of code safety. Additionally, Rust's zero-cost abstractions and efficient multithreading support enable us to achieve near-native performance, even for compute-intensive tasks. Consequently, our applications not only run faster but also consume fewer system resources, resulting in a more responsive and cost-effective solution for our clients.
For us, the adoption of Rust has proven to be a game-changer, primarily due to its ability to handle important business logic without code and test duplication.
Drupal as the right choice for us and our clients
Drupal is not only our number-one choice in CMS development but its ability to run headless opens much more possibilities. You can find more about how and why we use Drupal here: https://blog.touch4it.com/drupal-why-and-how-we-use-it
What about other technologies?
It's not uncommon for us at Touch4IT to inherit projects built on different technology stacks. While we have a strategic preference for the technologies mentioned above, we understand the importance of maintaining and enhancing existing systems. To that end, we have a skilled team of developers well-versed in various technologies to tackle inherited projects effectively. Some of them led us to Python or C++ and even more to PHP and Ruby.
PHP – Symfony or Laravel framework
Ruby on Rails
While considered a controversial choice in the developers' community, it’s still a go-to option in large-scale open-source projects in the world and our internal production system (Redmine) runs on it too. With enhancements and custom plugins we developed, we can safely say we do not hesitate to participate in development with this technology not only for internal tools but also for one of our largest projects we inherited where backend development is driven by Ruby on Rails too.
This is our main tech stack for the backend, but since we are a rapidly growing company and a majority of us enjoy keeping up with all the tech news and innovations, we always strive to challenge our solutions and explore new paths for development.