Low Technology Stack - Saved Money
Lukas Kosinski
Premium Embedded Software | Qt, C++, QML | HMI, Medical, IoT | Qt Champion 2023 (Ambassador)
When it comes to selecting the right technology stack for your software project you need to consider three main factors:
- quality
- price
- delivery time
You want the quality to be the highest with a possibly low price and a short delivery time. Of course, there is no ideal framework that will cover all of these aspects. However, choosing the right and small set of technologies to develop your software project will allow you to maximize quality, price, and delivery time metrics.
Let me explain what is my approach in this matter and why I consider the Qt framework one of the best choices for software project development. It can be a core technology in your low technology stack that will allow you to save money.
What is the technology stack?
Technology stack is known by various names such as solutions stack or technologies infrastructure, but let's stay with this one. This term refers to the set of technologies and tools that are used to build your app or the entire product's environment. A stack is usually (or at least should be) picked at the beginning of the project as the right choice makes the project development and maintenance much easier and cheaper.
How usually the stack looks like?? Let's take web development as an example, as it doesn't differ much from today's mobile or desktop development
Most of the web apps apps are built upon two main components: the front-end (client-side) and the back-end (server-side). For each side, you need to choose the best possible tools which not only are fine separately but will make the right fit when working together.
Usually, the server-side consists of:
- operating system - the base of the server
- webserver - software to manage applications and their instances
- database - structure to store information
- programming language - to code logic of app and manipulate database accordingly to requests from client-side
- framework - set of extra libraries for a chosen programming language to simplify the development process
At the same time, the front-end is built using one of the popular JavaScript frameworks that put HTML, CSS, and JavaScript itself to work. Anyway, the goal of this article is not to instruct you on how to choose a technology stack for web development. I just wanted to give you a clue about how a technology stack can look like.
Why technology stack should be low?
You just saw an example of a technology stack for a simple web application that consists of a server and client-side. That set of tools didn't seem to be high, did it? Typical solutions on the front-end and obvious needs for the back-end. Not much room for optimization. I agree.
However, now let's think about a more complex example. You need to develop and maintain the system including:
- web application
- Android application
- iOS application
- Windows application
- macOS application
- Linux application
- software running on embedded devices
It's quite an edge case with so many platforms to handle, but it happens and you never know where your software product will be in the future. Anyway, the reason to keep the technology stack low provided by me will be valid for software products targeted also on a smaller number of devices. So how technology infrastructure for the mentioned edge case system could look like?
Looking at the diagram above you can notice that every client's device needs to be handled with other technology. It is the approach that presumes the usage of native technologies wherever it's possible. It is true that this method provides the highest possible quality in aspects like user experience.
However, there are other factors to consider. A significant number of various technologies requires hiring many specialists with different set of skills. There is quite a limited number of developers that are skilled enough in several native technologies - for example in both Android and iOS development. At the same time, they are more expensive"
The time spent on actual programming is not the only extra expense you will have to handle. The cost of sharing knowledge is also increasing as more people need to communicate with others. As more people are involved in the project, more conversations need to be made.
Now imagine that your app is released. You still need to maintain it, so it generates an additional cost. Moreover, the time spent on fixing and polishing on different platforms may differ. What about developers who delivered their products? They will need to look for other jobs, but then you will need them again when implementing new features. You loose administration time spent on hiring them again or on looking for somebody new.
So what is my solution to keep the technology stack low? Go cross-platform!
The cross-platform approach relies on using one software development framework to develop applications for multiple platforms. By using it you will make savings multiplied by every platform that is handled by the cross-platform solution you chose. With this approach, software products can be delivered for a lower price and in a reasonable time. Still, cross-platform frameworks are not the right choice for every project, but I'll cover this subject in one of the next LinkedIn articles. Don't forget to follow my profile!
How Qt can help you to keep technology stack low?
So you already know that choices made in the initial state of software project development can significantly influence work progress, resources, and final product quality. Now let's talk about my favorite cross-platform framework and its advantages.
Qt is a cross-platform framework that goes out of the boundaries when it comes down to be a really cross-platform. In most cases, "cross-platform" means that you can use a particular technology to develop applications for Android and iOS or for desktop operating systems. Qt is an outstanding one here as you can use it to develop the following software applications:
- macOS desktop application
- Windows desktop application
- Linux desktop application
- iOS mobile application
- Android mobile application
- Software applications for embedded devices (whitepaper comparing Qt and HTML5 on embedded)
- The back-end for web application e.g. REST API using Qt Http Server
- Front-end for web application using Qt for WebAssembly
Don't rub your eyes in amazement. It's true. With Qt, it's possible to code and deploy applications for all of these platforms with a single codebase!. It means that you can share a huge amount of code between multiple platforms. You can use the same logic and most of the UI components on all of these platforms. Believe me that it makes an enormous difference.
Above, I mentioned that Qt is a perfect choice even if you target fewer platforms. That's right. It allows you to save time and resources even if you target only Android and iOS. However, there is something that can't be underestimated. When you choose Qt you don't close the door for future targets! If the need for compiling app for another platform comes up, you will be ready.
Qt is based on C++ and it comes with an internal Qml language that utilizes JavaScript for scripting. What does it mean? Both C++ and JavaScript have big communities and you can make your life easier with the number of open-source libraries that can be integrated in a blink of an eye.
Now let's look at how the technology stack from the previous example could look like if you decided to use Qt. It's much more simple, isn't it? Probably you have noticed that I didn't replace the web front-end with Qt for WebAssembly. Currently, it is functional, but in my point of view, it still needs polishing before being used in mass-scale products.
Keep in mind
I'm glad that you reached the end of this post with me. Let's summarize this article with a few important takeaways:
- Factors that influence the choice of software technologies include time, price, and quality
- Low technology stack allows price and cost optimization
- Qt let you deliver apps to the enormous number of platforms
I believe that using Qt for keeping a low technology stack is a good choice. However, I didn't mean to convey that it's the best possible framework to develop every application. There are also cases where other technologies will suit your requirements more. Contact me if you want to evaluate the usage of Qt in your product.