Decoding funda's tech stack: the reasons behind our choices
Ever wondered about funda's tech stack and what makes it successful? Staff Engineer Aleix Domenech guides you through our holistic approach, featuring .NET, C#, Vue, Terraform, Azure DevOps and more. Learn about the choices behind our tech stack in his blog post.
Explaining our tech stack
In the world we live in today and the fast-paced evolution of the digital landscape, it is essential that we select the right software stack to rapidly develop our business software platform and to keep it future-proof. To optimize efficiency, scalability and versatility, our software stack combines some of the most popular and powerful technologies available, facilitating a comprehensive approach to development.
To explain the most important parts of our software stack, I will start with the software languages and technologies we use to build our code. After that, I will focus on the technologies we utilise to pack and deploy our components, the platforms that power our CI/CD pipelines, and finally, the cloud solutions hosting the funda services.
Using existing technology like .NET and C#
First and foremost, at the core of our software stack and the technologies that have powered funda for the last decade or more, we find .NET and C#. Microsoft's .NET framework is a potent and competitive programming language. It offers developers a mature and scalable environment for building robust, contemporary enterprise applications, with many libraries and other tools available for even more extensibility.
The popularity of .NET and C# among developers makes finding resources and community support easy, further enhancing productivity and reducing development time. Our back-end services are the main areas we develop using Microsoft technologies.
Using new technologies for front end
On the other hand, for our front-end stack we use technologies that are very new to us – and the world in general. Recently, as part of our lighthouse architecture, we defined a new way of structuring and building our front-end applications.
The new node-based micro-frontends are built using Nuxt and Vue, which together create exceptional front-end experiences. Vue.js is a progressive JavaScript framework; it enables developers to build dynamic and innovative user interfaces with ease. Its simplicity and flexibility make it a very popular choice for front-end developers. Nuxt.js is a higher-level framework created on top of Vue.js; it enables additional features like server-side rendering (SSR) and a superior project structure. Nuxt and Vue provide a solid foundation for our front-end developers to build scalable and reliable front-end applications.
See also: Game changer: the benefits of having a lighthouse architecture
Flutter
Funda offers web services and native iOS and Android applications for our customers to explore our services. In the past, we maintained the two applications independently using native code. We have been very busy migrating all that work to Flutter in the last few years. Flutter is a new open-source platform developed by Google that allows developers to build powerful UIs for web, mobile and desktop applications from a shared codebase.
With Flutter, it is possible to effortlessly create visually appealing and high-performance applications that feel native to both iOS and Android users. The migration to Flutter allows our developers to provide a consistent experience across platforms.
Terraform and Helm
At this point, we've covered the technologies in our stack that allow us to develop and maintain our platform. Our stack relies heavily on Terraform and Helm to maximize the orchestration and infrastructure deployment. Terraform is a cloud-agnostic infrastructure-as-code-tool that allows us to define and provision infrastructure in a simplified and common way. It enables declarative configuration code that powers our cloud infrastructure, it eliminates manual provisioning and it allows developers to fully own their features end-to-end, from infrastructure and data to software.
Helm streamlines the deployment and management of our Kubernetes containerized applications using pre-packaged charts. These charts simplify the deployment process of complex applications, their dependencies and handling updates. By automating our infrastructure provisioning, we can easily deploy the same stack into diverse environments, ensuring testability and reliability at scale.
GitHub
Of course, we need to host our source code somewhere, and for us, the best place to do that is in a distributed version control system (VCS). We chose GitHub as our main VCS provider. GitHub is pivotal in enabling seamless code collaboration within our development team. It provides a secure and transparent environment for version control, helping us track changes, manage pull requests and review code effectively.
GitHub's robust ecosystem allows us to integrate with various tools, automate workflows and ensure development best practices. Additionally, our front-end developers decided that the best platform for them to build and distribute their NPM packages was GitHub Actions and GitHub Packages registry, respectively, which they use as part of the GitHub enterprise ecosystem.
Azure DevOps
To manage our continuous delivery pipelines, we rely heavily on Azure DevOps. This platform integrates seamlessly with GitHub, which we prefer for continuous integration. Azure DevOps enables our developers to use YAML declarative configuration files for their CD pipelines, while the extensible and modular framework allows our SRE and Platform teams to provide a plethora of modules that stream-aligned teams can utilise to easily build their deployment pipelines for both back-end and front-end applications, testing and running their infrastructure as code.
See also: Running Playwright tests in Azure DevOps: A step-by-step guide
Azure DevOps enables our developers, testers and operation teams to collaborate efficiently, ensuring smooth integration of code changes and seamless deployment to various environments. Its rich set of built-in tools and integrations simplifies the entire development process, which is why we opt for Azure DevOps pipelines over GitHub Actions – except for the NPM packages, since our front-enders’ preferred system is still GitHub.
Hybrid cloud strategy
At funda, we are a microservices company running natively in the cloud. Our main cloud provider is Azure, Microsoft's cloud platform, which offers a vast range of services and solutions, including computing, storage and networking. It provides a scalable and reliable infrastructure to support the deployment and management of applications. Some of the main services we use from this platform are Azure Kubernetes Service, KeyVault, Azure App Configuration, CosmosDb and Azure Storage.
But we know that sometimes the best tools cannot be found on the same platform, so we opened ourselves to using a hybrid cloud strategy. By combining Azure's power with some specialized tools from AWS, we give ourselves the best possible tools for success. Both platforms offer global availability, high scalability, and robust security features. Utilizing Azure and AWS, our software stack embraces the advantages of hybrid and multi-cloud architectures, ensuring flexibility, resilience and high availability.
Our choice of tools
It has not always been straightforward to choose the right tool for the job or pick the perfect technological stack for each part of our platform. C# and .NET were clear choices, since most of our existing software was built on top of those tools. The rest of the frameworks used throughout our landscape were selected using a combination of the proverbial look over our shoulder to other players in the sector, the recommendations of our engineers and some degree of luck. Overall, we are very happy with our choices, how they integrate, and how much our developers enjoy working with them.
We are fully aware that our current tech stack will naturally evolve over time and are open to this evolution. We built our software in such a way that it promotes innovation and allows us to quickly replace components without compromising the stability of the rest of our platform.
Holistic approach
In the realm of software development, I think it's essential to harness the power of a robust software stack to produce outstanding applications. Our software stack, featuring .NET, C#, Nuxt, Vue, Terraform, Helm, GitHub, Azure DevOps, Microsoft Azure and AWS, provides developers with a versatile and efficient framework for developing secure, scalable and high-performing applications.
By combining these technologies seamlessly, our stack ensures a holistic approach to building cutting-edge software solutions, empowering our businesses to achieve their digital goals in an ever-evolving technological landscape. The integration of these technologies allows for flexibility, scalability and the ability to leverage the best of modern interfaces and cloud computing, giving funda a strong competitive advantage in today's digital world.
See also: Learning Terraform: What I wish I had known earlier