Skip to main content

Adding extra- complexity to a solution by using too many SaaS of a cloud provider

Context
When you embrace Azure or another cloud provider, you’ll discover an environment that offers out of the box a high variety of options for each type of action that you need.
Let us take computation as an example. If on-premises you would have the option only on top of VMs, where on top of them you would be able to put any other solution that you would like, when you are on Azure, things are looking different.
Beside the classical VMs, on Microsoft Azure you have: Scale Sets, App Services, Functions, AKS (Azure Container Services), Container Instances, Batch, Service Fabric and other Cloud Services (classical Web and Worker role for example).

Problem
Having so many options, selecting the best service for your needs might be tricky. It is not about taking the wrong decision; it is more about selecting the right service for your needs, taking into account your context and expectations.
This is one of the most challenges steps during the initial phases of the project that can ensure the success of failure of a project.

Internal Fight
When you need to decide what are the Azure (cloud) components that will gone be used inside your solutions, in most of the cases there might be a friction between two groups. One of them is trying to go with greatest and latest services and technologies and the other one is trying to go safe, with a classical approach.
A good example is:

  • A solution based on Azure VM Scale Sets, Azure SQL and Azure Storage

vs

  • A solution on top of containers (AKS), with Azure Cosmos DB and Azure MySQL

Both parties are proposing good ways on how you can approach the problem. In the end, you need to draw a risk matrix and see what are the pros and cons of each approach. 

A hidden risk
Having at a click distance an ecosystem with so many services available, the technical teams are driven to use as many services as possible. On one side, this is good, because using SaaS reduce the responsibility of the team, but using to many services adds also extra complexity.
For each service, you need to know the pricing model, behavior, limitations, API, configuration and many more. This might not sounds too much… or not? Because the team will try to use the latest services and create a state-of-the-art solution, you can end-up with 14-16 services mixed up together for a simple solution that could use just one computation solution and a storage.

Example
Let us imagine that we want to develop a system that is processing documents. A classical approach would be:

  1. Azure Storage
  2. Azure SQL
  3. Azure Service Bus
  4. Azure App Services
  5. Azure Batch

Another approach that is good as the first one could contain:

  1. Azure Storage
  2. Azure SQL
  3. Azure Cosmos DB
  4. Azure App Services
  5. Azure Container Services
  6. Azure Functions
  7. Azure Data Factory
  8. Azure Logic Apps

Both solution are correct, there is nothing’s wrong with the first one or with the second one. On the second approach there is an extra complexity layer added by extra services. We need to put this in balancer when we take a look over product requirements and NFRs.

Conclusion
Be careful when you combine too many services from a cloud provider. Each extra service adds extra complexity to the system, making it more complex to manage and develop. There is a thin line between a good solution and over-engineering when you have so many services at a click distance. 

Comments

Popular posts from this blog

How to check in AngularJS if a service was register or not

There are cases when you need to check in a service or a controller was register in AngularJS.
For example a valid use case is when you have the same implementation running on multiple application. In this case, you may want to intercept the HTTP provider and add a custom step there. This step don’t needs to run on all the application, only in the one where the service exist and register.
A solution for this case would be to have a flag in the configuration that specify this. In the core you would have an IF that would check the value of this flag.
Another solution is to check if a specific service was register in AngularJS or not. If the service was register that you would execute your own logic.
To check if a service was register or not in AngularJS container you need to call the ‘has’ method of ‘inhector’. It will return TRUE if the service was register.
if ($injector.has('httpInterceptorService')) { $httpProvider.interceptors.push('httpInterceptorService&#…

ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded

Today blog post will be started with the following error when running DB tests on the CI machine:
threw exception: System.InvalidOperationException: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' registered in the application config file for the ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information. at System.Data.Entity.Infrastructure.DependencyResolution.ProviderServicesFactory.GetInstance(String providerTypeName, String providerInvariantName) This error happened only on the Continuous Integration machine. On the devs machines, everything has fine. The classic problem – on my machine it’s working. The CI has the following configuration:

TeamCity.NET 4.51EF 6.0.2VS2013
It seems that there …

Fundamental Books of a Software Engineer (version 2018)

More then six years ago I wrote a blog post about fundamental books that any software engineer (developer) should read. Now it is an excellent time to update this list with new entries.

There are 5 different categories of books, that represent the recommended path. For example, you start with Coding books, after that, you read books about Programming, Design and so on.
There are some books about C++ that I recommend not because you shall know C++, only because the concepts that you can learn from it.

Coding

Writing solid codeCode completeProgramming Pearls, more programming pearls(recommended)[NEW] Introduction to Algorithms

Programming

Refactoring (M. Fowler)Pragmatic ProgrammerClean code[NEW] Software Engineering: A Practitioner's Approach[NEW] The Mythical Man-Month[NEW] The Art of Computer Programming

Design

Applying UML and Patterns (GRASP patterns)C++ coding standards (Sutter, Alexandrescu)The C++ programming language (Stroustrup, Part IV)Object-oriented programming (Peter Coad)P…