A Lightweight, Low Cost Approach
Over the years, Entrance has worked with clients of varying sizes on projects both big and small. The smaller the project, the more likely it is that licensing fees account for a significant majority of the overall budget. This upfront cost creates a kind of pay wall, and can easily stop a project from progressing. To avoid this, Entrance recommends to organizations of all sizes (even enterprise) to take advantage of lightweight and low cost tools. “Low cost” is self-explanatory, and “lightweight” refers to ease of deployment to your environment: on-premise, cloud host, or mobile devices.
The high-level architecture is quite simple: leverage existing software (open-source or SaaS), avoid upfront purchasing costs, and minimize IT maintenance overhead. The idea is to create an IT environment that is flexible, scalable, portable, and secure which is quite the opposite of how most IT professionals would describe their own infrastructure. Additionally, the costs to scale this environment grow linearly with usage, and can be scaled back down with ease. As for the actual software solution, we strive to build our applications using a variety of smaller components instead of a single monolithic application. These components are often referred to as micro-services, and are easier to build, deploy, test, and maintain.
In a perfect world, we would recommend a completely serverless approach, meaning zero servers (no virtual machines either), therefore, no operating systems to manage. This can be referred to as Functions as a Service, and both AWS and Azure have a presence in this market: AWS Lambda and Azure Functions. Instead of deploying an entire application, we build and deploy small functions which when put together form the big picture application. Functions can be re-deployed, updated, and deprecated individually without effecting any of the other functions. Typically, pricing only includes execution time, so you pay nothing for idle functions. Unlike an idle virtual machine which would cost you per hour even when it is not being actively used by your application. This removes all the costs and maintenance effort associated with maintaining virtual machines in the cloud. This approach extends to databases also, a managed database service is preferred to further abstract tasks related to keeping a database healthy, secure, and performant.
Even if an organization is not bought in on the idea of a completely serverless environment, we can still implement a similar architecture using Docker containers and the same microservices philosophy. We lose a bit of the pricing flexibility, but we still retain the scalability and many of the other benefits.
With or without servers, Entrance highly recommends using third party SaaS products where appropriate. We don’t want to force a product into a solution if it does not belong, but we also don’t want to re-invent the wheel. MailChimp and SendGrid are amazing products for sending emails. Unless you plan on trying to compete in their market, why not use their services? The same is true for web traffic analytics, credit card payment, e-signature, SMS, and so many other add-ons that you will want to mix in to your solution.
Why do we care about portability? Well, portability is a loaded term as it can refer to ease of deployment between various environments, or it can mean how well an application deploys to various operation systems (Windows, Linux, and Mac OS). Luckily we mean both. We want to encourage a mature software development process which includes a promotion path from dev to test and test to production on a frequent basis. We also don’t want a solution to be married to a specific operating system and the related licensing costs.
The big cloud vendors such as AWS (Amazon Web Services) and Microsoft Azure are constantly improving their services, releasing new products, and routinely battle each other with price reductions. The Entrance approach takes full advantage of most of the AWS/Azure offerings, and we typically recommend a cloud environment over an on-premise option. This is especially true if you don’t already have a server room or an IT team. The advantages of cloud-based environments for most projects are clear: little to no upfront cost, typically no long-term contracts, and painless to scale up or down over time.
It is worth noting that Node.js can be deployed to most operating systems (Windows, Linux, and Mac) and cloud vendors including: AWS, Azure, Heroku, and Google.
Database & Storage
Finally — the database. Database software licensing costs can account for a significant majority of the licensing costs for an application especially with the newer “per core” licensing model for SQL Server. Exploring the “lightweight & low cost” options we have PostgreSQL, MySQL, and SQLite on the traditional SQL side of things, and MongoDB and RethinkDB on the NoSQL side. All five of these databases are open-source and require no licensing fees to leverage them. During the project design, we would determine which database makes the most sense based on project requirements, volume/scale of information, and structure of the data. Contrary to popular believe, NoSQL is not better than SQL database because it is newer — it is just a different way to store data.
For many applications, we also recommend Elasticsearch be used with the database. Elasticsearch is an open-source search and analytics appliance with several add-ons. One such add-on is Kibana, a visualization tool for creating simple dashboards and reports powered by search queries from Elasticsearch. Kibana makes for a great stop-gap solution before implementing a bigger visualization tool like Tableau or Spotfire, and Elasticsearch can reduce complexity of application search queries and improve performance.