The following article was contributed to DZone by Samer Fallouh, Vice President of Engineering at Dialexa, a technology development company that contributes information of value to DZone on a regular basis.
You have an idea for an Internet of Things solution or a product, and you need to hire a team capable of creating the product you have in mind. Is the software stack a part of your evaluation? What should you look for in a team to help you find the right company capable of bringing your ideas to realization?
When considering engineering partners, it is important to understand what tools they use in order to accomplish the project you are looking for. Not all software companies offer innovative solutions when it comes to platforms. You need a forward-thinking team capable of not only creating your masterpiece, but also ensuring that it does not become obsolete in a short amount of time.
At Dialexa, we build end-to-end products. We have designed and built scalable IoT platforms, mobile apps and electronic devices. Clients typicially come to us with an idea and will leave with a product; whether it is a software or hardware solution. Our engineers, designers, and developers work together to pick the right technologies to solve the problem and bring an innovative idea to life.
Choosing the right technologies and tools, such as the right solution stack, is an important part of the architectural challenges we try to solve. We are always researching and adopting emerging cutting-edge technologies. Of course, we always consider what has been previously architected on a particular application when applicable, as we are not in the business of reinventing the wheel. However, we do look at the big picture and the company's long-term goals to avoid the "quick and dirty" trap that many technology companies fall into. In this post, we share an example of a software stack we have used to build platforms that are now disrupting the automotive, parking and lawn care industries.
WHAT IS A SOFTWARE STACK AND WHY IT IS IMPORTANT
Before we discuss an example Dialexa stack, it is important to understand what a software stack is in general. Software stacks are also called "solution stacks" or "technology stacks" and used to provide a complete platform to run applications. These components give the software the power and versatility necessary to process complex instructions. Software stacks generally include operating systems and/or runtime environments, a database, a web server and a web application framework. In some instances, software stacks may include programming languages, software servers, web interface, clients, client interfaces, and other required pieces of software.
Some of the well known software stacks are LAMP (Linux, Apache, MySQL, and PHP), WINS (Windows Server, IIS, .NET, and SQL Server), and recently emerging MEAN stack which we will discuss below.
THE MEAN STACK
HOW OUR EXAMPLE DIALEXA STACK IS SIMILAR TO AND DIFFERENT FROM THE MEAN STACK
The example Dialexa stack has some similarities to the MEAN stack, which is why we mention it here for the sake of comparison. We do base our platform on the Node.js runtime environment, which enables us the same portability and flexibility as the MEAN Stack. But instead of using MongoDB, we choose to use PostgreSQL (Postgres) and Elasticsearch. This combination of relational and nonrelational data stores allowed us to build real-time dashboards monitoring hundreds of transactions per minute without the risk of blocking the actual transactions flow.
The next step is choosing the right framework for our API layer. The MEAN stack uses Express framework which has the biggest community supporting it out there. Express is a great framework that offers a simple way to get a server up and running in no time; however, one can argue that it is not optimized for larger teams. Hapi.js an open-source framework that came out of WalmartLabs which we've adapted in our example stack. Hapi.js is built with configuration over convention, it has authentication and powerful validation built in. All of this makes Hapi the better tool for more complex platforms that require bigger teams contributing to the same code base; Hapi made a lot of our clients happy!
Lastly, we use EmberJS instead of AngularJS. At the time when we made this decision, Angular was geared more towards single-page applications. Ember with its MVC structure, was designed to build full, scalable applications with various routing controls we never thought were possible.
It is not about using what we are comfortable with; it is about using the right tools for the job.